已知一个窗体句柄,获取窗体某一个属性的值

andyzhu2001 2011-11-30 11:27:08
已知一个窗体句柄,获取窗体某一个属性的值,我这要获取窗体BorderStyle的值,不知道用EnumProps是否可以实现,如果可以能给一个实例吗?如果不行,那有什么办法可以做到?
...全文
326 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
funxu 2011-12-02
  • 打赏
  • 举报
回复
仅限delphi程序
funxu 2011-12-02
  • 打赏
  • 举报
回复
以前倒是做过类似的东西,不过这种程序针对性强,需要调试,确实没时间
给你个思路,用钩子注入目标程序,然后通过控件句柄获取目标实例再转换
句柄的获得方法有很多,可以通过鼠标位置定位然后传递给钩子,也可以在钩子内部遍历窗体控件通过控件名寻找
贴一段以前学习的摘要
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);
kaikai_kk 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mwy654321 的回复:]
引用 5 楼 andyzhu2001 的回复:
我是在主程序exe,获取dll中的窗口句柄,都是用delphi写的,请教如何实现?


暂时没有时间帮你免费弄。
[/Quote]

+
andyzhu2001 2011-11-30
  • 打赏
  • 举报
回复
谢谢你,不过你可能没有理解我说的,我是要得到句柄窗口的属性,不是遍历句柄窗口中的子控件。
[Quote=引用 1 楼 xiaofansong 的回复:]
可以的啊。

Delphi(Pascal) code
function EnumChildWindowsProc(hwnd: THandle; lparam: Integer): LongBool;
var
buffer: array[0..255] of char;
cName : array[0..254] of Char;
wText : array[0..254]……
[/Quote]
一剑飘雪 2011-11-30
  • 打赏
  • 举报
回复
可以的啊。
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;
无条件为你 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 andyzhu2001 的回复:]
我是在主程序exe,获取dll中的窗口句柄,都是用delphi写的,请教如何实现?
[/Quote]

暂时没有时间帮你免费弄。
一剑飘雪 2011-11-30
  • 打赏
  • 举报
回复
建议楼主还是看看spy++的源码吧。有一些api的
自己谷歌搜索
andyzhu2001 2011-11-30
  • 打赏
  • 举报
回复
我是在主程序exe,获取dll中的窗口句柄,都是用delphi写的,请教如何实现?
[Quote=引用 4 楼 mwy654321 的回复:]
如果目标exe是用delphi写的,则可以实现。如果是其它编程语言写的exe,那么不存在属性这种说法,属性对应的是一些api获取值的封装。
[/Quote]
无条件为你 2011-11-30
  • 打赏
  • 举报
回复
如果目标exe是用delphi写的,则可以实现。如果是其它编程语言写的exe,那么不存在属性这种说法,属性对应的是一些api获取值的封装。
andyzhu2001 2011-11-30
  • 打赏
  • 举报
回复
在线等~~~

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧