如何获取应用程序的特定前景窗口

时间:2015-01-21 12:41:44

标签: windows winapi

我可以以某种方式获取应用程序的特定前景窗口吗?例如,不是整个Skype应用程序的HWND,而是一些当前选择的此应用程序的内部窗口(可能是聊天窗口的文本编辑)。

提前致谢。

1 个答案:

答案 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?)