FindWindowEx无法找到窗口句柄

时间:2010-02-03 18:50:00

标签: c++ winapi

我试图在对话框打开后立即找到它的句柄。

现在,只要对话框打开,我就尝试在单独的线程中为该对话框调用FindWindowEx,但它返回NULL。

然后我在调用FindWindowEx之前先休息一下。睡觉后它会工作一段时间。

看起来FindWindowEx在创建对话框之前就被调用了,而sleep正在帮助创建对话框,因此有时它可以工作。

现在我已经在睡眠中放了一些随机值。并且它看起来不是一个好方法,因为它可以随时失败。

是否有任何完整的证明方法,以便每次都可以通过FindWindowEx处理,而不会使线程进入睡眠状态。

2 个答案:

答案 0 :(得分:2)

如果您要查找的对话框是您的对话框 - 也就是您控制代码 - 那么您可以从对话框向您的观看应用发送一条消息,说“哦,你好!”

如果对话框不属于您,并且您不想旋转,则可以在WM_CREATE消息上create a Windows hook

答案 1 :(得分:1)

一个非常直接的解决方案是在循环中重复调用FindWindowEx

HWND h = NULL;
while (1) {
      h = FindWindowEx(...);
      if (h) {
         break;
      } 
      Sleep(100);
   }

这不是防弹 - 如果对话框打开,或者关闭得太快(尽管不太可能),这是一个无限循环。要捕获这两种情况,让主线程(创建并运行对话框)维护一个简单的bool属性,工作线程查询该属性以查明是否还有对话框。