以下几个函数可以根据指定条件获得窗口的句柄:
1、FindWindow返回指定顶层窗口的句柄,该窗口的类名和窗口名与参数中指定的字符串相匹配,在查找时不区分大小写。这个函数不查找子窗口,如果要查找子窗口使用FindWindowEx()。函数原型:
HWND WINAPI FindWindow(
LPCTSTR lpClassName, //窗口类名,可以传NULL
LPCTSTR lpWindowName //窗口名
);
2、GetWindow返回与指定窗口有指定关系(如Z序或所有者)的窗口的句柄,如果与指定窗口有特定关系的窗口不存在,则返回NULL。函数原型:
HWND WINAPI GetWindow(
HWND hWnd, //指定窗口
UINT uCmd //与要获得窗口的关系
);
uCmd可以是下列值之一:
GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。
GW_ENABLEDPOPUP:返回的句柄属于指定窗口的所拥有的启用弹出窗口;如果没有启用弹出窗口,则获得的句柄与指定窗口相同。
GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。
GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。
GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口的下一个相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。
GW HWNDPREV:返回的句柄为在Z序中指定窗口的上一个相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。
GW_OWNER:返回的句柄为指定窗口的所有者窗口(如果存在)。GW_OWNER没有父窗口的含义,如果想得到父窗口请使用GetParent()。
3、GetNextWindow()函数可以获得指定窗口(控件)的上一个或下一个窗口(控件)的句柄。函数原型:
HWND WINAPI GetNextWindow( HWND hWnd, //指定窗口 UINT wCmd //查询方式:向上或向下查找 );参数wCmd指定查询方式:GW_HWNDNEXT为返回下一个窗口,GW_HWNDPREV则为返回上一个窗口。
4、WindowFromPoint返回包含指定点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控件之上,返回值是在该静态文本控件的下面的窗口的句柄。函数原型:
HWND WINAPI WindowFromPoint(POINT Point);
WindowFromPoint函数不获取隐藏或无效窗口的句柄,应用程序应该使用ChildWindowFromPoint函数进行无限制查询,这样就可以获得静态文本控件的句柄。