那如果句柄标识的是其他程序中的对象呢?还能找到它的父类?如果是内核对象的句柄呢?或者gdi对象?
没办法通过句柄判断出此对象是否是~~内核对象或者用户对象,更别说它是否有父类以及父类是什么了。

解决方案 »

  1.   

    若是确定某一个对象,可以用classtype返回其父类,但是句柄就不行了。
      

  2.   

    char ClassBuf[32];
    AnisString ClassName;GetClassName(hWnd,ClassBuf,sizeof(ClassBuf));
    ClassName=AnsiString(ClassBuf);主:这种方法只得到控件的类名,无法得到控件的父类的类名。
      

  3.   

    看来是我错了,getclassname确实能返回类名,不过对于内核对象等的句柄处理有些问题,用try保护起来效果可以。GetClassName
    The GetClassName function retrieves the name of the class to which the specified window belongs. int GetClassName(
      HWND hWnd,           // handle to window
      LPTSTR lpClassName,  // class name
      int nMaxCount        // size of class name buffer
    );
      

  4.   

    //参考如下代码
    procedure TForm1.Button2Click(Sender: TObject);
    var
      vBuffer: array[0..255]of Char;
      vClass: TPersistentClass;
    begin
      GetClassName(Handle, vBuffer, 255);
      Caption := vBuffer;
      RegisterClasses([TForm1]);
      vClass := GetClass(vBuffer);
      if Assigned(vClass)  then ShowMessage(vClass.ClassName);
      UnRegisterClasses([TForm1]);
    end;
      

  5.   

    其实我的目的是这样的:
    我想做一个打印的控件,只要传入需要打印的控件的句柄就可以打印出当前它的内容来,但是对于象LISTVIEW,DBGRID的这样的控件呢,我就想得到他们当前的内容然后打印出来,所以首先是要判断控件是属于那个类。
    另外一个问题是:
    如果我知道了类LISTVIEW的对象的句柄,并且知道它属于LISTVIEW类,如何得到它的内容呢????
      

  6.   

    使用消息LVM_???如LVM_GETITEMCOUNT,LVM_GETITEM等,也可以使用宏ListView_GetItem,...
      

  7.   

    能说得清楚一些吗??? BCB_FANS(四大名捕之追杀令)
      

  8.   

    先看一下这个帖子,如果还不行我再出手.http://www.csdn.net/expert/topic/769/769730.xml?temp=.1638758
      

  9.   

    非常的详细,谢谢BCB_FANS(四大名捕之追杀令)
      

  10.   

    用CLASSPARENT就可以了,一直可以追朔到根上。如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ClassRef: TClass;
    begin
      ListBox1.Clear;
      ClassRef := Sender.ClassType;
      while ClassRef <> nil do
      begin
        ListBox1.Items.Add(ClassRef.ClassName);
        ClassRef := ClassRef.ClassParent;
      end;end;