话题1174498的标题是: 如何取得活动窗口的子窗口句柄? (100分)
分类:Windows API ngdsjck (2002-06-20 16:36:00)
1、利用API对窗口操作时, 如何取得一启动主窗口下,某一个子窗口的句柄?
2、若取得该子窗口句柄后, 如何取得该窗口下一编辑框的内容?
张无忌 (2002-06-20 16:49:00)
这几个 函数配合
hwnd:=GetForegroundWindow();
hwnd:=Getwindow(hwnd,GW_HWNDFIRST);
hwnd:=Getwindow(hwnd,GW_HWNDNEXT);
ngdsjck (2002-06-20 16:59:00)
张无忌:
我采用过上述函数, 但不能取得一个主窗口下子窗口的句柄。
张无忌 (2002-06-20 17:07:00)
我不太明白你的意思
mark_yjh (2002-06-20 17:14:00)
听课
book523 (2002-06-20 17:31:00)
可以用findwindowEx函数取得edit的hwnd
ngdsjck (2002-06-20 19:14:00)
请问BOOK523,在程序上是如何实现,能否举一例子?
lfpsoft (2002-06-21 23:19:00)
var
H : THandle;
H:= FindWindow('Shell_TrayWnd',nil);
H :=Findwindowex(H,0,'Button',nil);//开始菜单按扭的句柄
ngdsjck (2003-12-30 11:06:00)
接受答案了.
book523的回答最终被接受。
------------------------------
话题2273998的标题是: 如何获取子窗口句柄 (30分)
分类:Windows API lyonlu (2003-11-05 12:27:00)
已经获得父窗口句柄,我想获得子窗口句柄,用findwindowex()和getwindow()都不行,请教各位师兄师姐该怎么办?
HFwnd := FindWindow(nil,'无标题 - 记事本');
Hwnd := GetWindow(HFwnd,GW_CHILD);
HFwnd := FindWindow(nil,'无标题 - 记事本');
Hwnd:=FindWiodowEx(HFwnd,NULL,nil,nil);
xianjun (2003-11-05 12:41:00)
如果你知道CLASS 及CAPTION,用FindWindowEx是肯定可以的
象你第二个,所有参数都传空,当然什么都找不到了。
另外也可以用EnumChildWindow把所有的子窗口枚举出来,你再一一判断
pihome (2003-11-05 12:45:00)
测试没发现问题
function EnumChilds(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
ClassName: Array[0..255] of Char;
begin
GetClassName(hwnd, @ClassName, 255);
ShowMessage(ClassName);
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h, c1, c2 : HWND;
begin
h := FindWindow(Nil, '未定标题 - 记事本');
if h = 0 then
Exit;
EnumChildWindows(h, @EnumChilds, 0);
c1 := GetWindow(h, GW_CHILD);
c2 := FindWindowEx(h, 0, 'Edit', Nil);
ShowMessage(Format('%d %d',[c1, c2]));
end;
PhoenixPower (2003-11-05 12:54:00)
难!我也遇到过这样的问题,当时我想得到一个Excel窗体的句柄,用了FindWindow,GetWindow......甚至连遍历进程,得到进程Id后转换为窗口句柄的方法都用上了,还是不行。(当然这个方法是由于进城Id时时变化造成的),然用FindWindow更不可靠,原因在于窗口的标题的不确定以及不能遍历整个当前的窗口说造成的。
所以劝你还是另选一种更为可靠的方法编程吧!
lyonlu (2003-11-05 13:14:00)
我可以用winsight32查到子窗口的class是Edit,
HFwnd := FindWindow(nil,'无标题 - 记事本');
Hwnd:=FindWiodowEx(HFwnd,0,'Edit',nil);
还是不行,我用单步运行,用watch list观察,运行第一行能看到HFwnd的数值,运行第二行就看不到Hwnd的数值。
lyonlu (2003-11-05 13:25:00)
多人接受答案了。
PhoenixPower-5,pihome-20,xianjun-5,的回答最终被接受。