我可以以某种方式获取应用程序的特定前景窗口吗?例如,不是整个Skype应用程序的HWND
,而是一些当前选择的此应用程序的内部窗口(可能是聊天窗口的文本编辑)。
提前致谢。
答案 0 :(得分:0)
您可以使用EnumChildWindows。
基本上,它会遍历给定窗口的子窗口,直到找到具有所需特征的窗口。并且 - 很高兴知道"父母"所有应用程序窗口都是HWND_DESKTOP
这是代码:
EnumChildWindows(HWND_PARENT,findChildWithClass,(LPARAM)"NetUIHWND");
以及其他地方:
BOOL CALLBACK findChildWithClass(HWND hwndTest,LPARAM lParam) {
char *pszClass = (char *)lParam;
char szClass[64];
GetClassName(hwndTest,szClass,64);
if ( strlen(szClass) < 1 ) return TRUE;
if ( 0 == _strnicmp(pszClass,szClass,min(strlen(pszClass),strlen(szClass))) ) {
hwndFoundChild = hwndTest;
return FALSE;
}
EnumChildWindows(hwndTest,findChildWithClass,lParam);
if ( hwndFoundChild )
return FALSE;
return TRUE;
}
所以,函数&#34; findChildWithClass&#34;将由Windows重复调用指定父项的下一个子项的句柄。 当该子窗口的特征与您要查找的内容匹配时,在本例中类名称,该函数设置全局静态的值,并返回FALSE以指示枚举应该停止。
你可以使用Spy ++获取任何窗口的类名,在这种情况下,我使用spy ++来查找MS Word框架窗口的名称。但是,由于特定的代码也会查看发送给它的每个孩子的每个孩子 - 你也可以找到一个&#34;内部&#34;使用它的MS Word窗口。另外 - 您不必使用类名,或许其他东西(窗口内容?)对于您尝试发现窗口的应用程序是唯一的(Skype?)