有谁能够写关于取其他的程序的编辑控件的句柄码(100分)

  • 主题发起人 主题发起人 wmyao
  • 开始时间 开始时间
先找到你要查找的程序的句柄。然后用GetWindow列举其子窗的类名,如果该类名为
Edit,则那就是你要找的编辑控件句柄。

var
HWnd: THandle;
Str: PChar;
begin
GetMem(Str, 256);
try
Result := 0;
HWnd := GetWindow(SomeApplicationHandle, GW_CHILD);
repeat
GetClassName(HWnd, Str, 255);
if Str = 'Edit' then
ShowMessage(IntToHex(HWnd, 8));
HWnd := GetWindow(HWnd, GW_HWNDNEXT);
until HWnd = 0;
finally
FreeMem(Str, 256);
end;
 
对不起,我顺便在问一下,如何取IE浏览页的编辑控件.
 
首先查找 IE 的窗口句柄才能继续查找它的子窗口。
FindWindow 可以实现这个功能。
 
我都试过了,不行。
 
需要一层层的获取子窗口,你要找的控件不一定是IE的下级子窗口,也可能
是下两级甚至三级,你需要一层层查下去,FINDCHILDWINDOW只能查一级的
 
我都用的枚举函数(EnumChildWindow)取都取不到
 
枚举好象也不能得到下下一级的,你试试我的办法,递归查找所有的句柄,得到
每一个的下级,总能找到
 
不行,下面是我写的找子窗口函数,我也同时于枚举同时用都不行,请个为大侠指点,

谢谢!

void __fastcall TForm1::FindChildWindow( HWND hwnd )
{
HWND hwnd1;
AnsiString str;
str.SetLength( 255 );
hwnd1 = ::GetWindow( hwnd, GW_CHILD );
while (hwnd1 != NULL)
{
::GetClassName( hwnd1, str.c_str(), 255 );
ShowMessage( str );
if (str.Pos( "Edit" )>0)
::SetWindowText( hwnd1, "test" );
hwnd1 = ::GetWindow( hwnd1, GW_HWNDNEXT );
}
}
 
IE中的编辑框不同于一般的编辑框,它好象没有Handle的
他可能是通过其他技术实现的
 
是否是钩子(Hook)技术,如果是,能否给一点提示信息
 
你是不是想写填表软件一类的?是的话,我的办法好像不行,跟你一起等答案 :-)
 
多人接受答案了。
 
后退
顶部