已知一个窗体句柄,获取窗体某一个属性的值,我这要获取窗体BorderStyle的值,不知道用EnumProps是否可以实现,如果可以能给一个实例吗?如果不行,那有什么办法可以做到?

解决方案 »

  1.   

    可以的啊。
    function EnumChildWindowsProc(hwnd: THandle; lparam: Integer): LongBool;
    var
      buffer: array[0..255] of char;
      cName : array[0..254] of Char;
      wText : array[0..254] of Char;
        arr: array[0..255] of Char;
      cRect : TRect;
      str,strwrite:string;
    begin
       GetClassName(hWnd, cName, 255);
     // strwrite :=basedata.proxy_Name;// 
      if (StrPas(cName)='Edit' ) or (StrPas(cName)='Button') or (StrPas(cName)='ComboBoxEx32' )then
      begin
        SendMessage(hWnd,WM_GETTEXT,255,Longint(@arr));
        if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='ComboBoxEx32')  then
        begin
           str:=basedata.proxy_Name;//
           sendmessage(hWnd,WM_SETTEXT,length(str), longint(pchar(str)));
        end;
        Application.ProcessMessages;
      //  showmessage(strpas(arr));
        if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='Edit')and (trim(strpas(arr))<>basedata.proxy_Name)then
        begin
          strwrite :=basedata.Proxy_Pwd;// '';
          SendMessage(hWnd, WM_SETTEXT, 0, Integer(PChar(strwrite))); 
        end;
        if (trim(strpas(arr))='确定') and (StrPas(cName)='Button') then
        begin
           SendMessage(hWnd, WM_LBUTTONDOWN, 0,0);
           SendMessage(hWnd, WM_LBUTTONUP, 0,0);
        end; 
        Result := True;
      end;
    end;
      

  2.   

    如果目标exe是用delphi写的,则可以实现。如果是其它编程语言写的exe,那么不存在属性这种说法,属性对应的是一些api获取值的封装。
      

  3.   

    我是在主程序exe,获取dll中的窗口句柄,都是用delphi写的,请教如何实现?
      

  4.   

    建议楼主还是看看spy++的源码吧。有一些api的
    自己谷歌搜索
      

  5.   

    以前倒是做过类似的东西,不过这种程序针对性强,需要调试,确实没时间
    给你个思路,用钩子注入目标程序,然后通过控件句柄获取目标实例再转换
    句柄的获得方法有很多,可以通过鼠标位置定位然后传递给钩子,也可以在钩子内部遍历窗体控件通过控件名寻找
    贴一段以前学习的摘要
      PObjectInstance = ^TObjectInstance;
      TObjectInstance = packed record
        Code: Byte;
        Offset: Integer;
        Method: Integer;
        Ins: Cardinal;
      end;
    var
      P: PObjectInstance;
      Cusedit:TEdit;
    begin
      P := PObjectInstance(GetWindowLong(WinHandle, GWL_WNDPROC));
      Cusedit:=TEdit(P.Ins);