我试图在对话框一打开就找到它的句柄。
现在,只要对话框打开,我就会尝试在一个单独的线程中为该对话框调用FindWindowEx,但它返回NULL。
然后,我在调用FindWindowEx之前进行了一些睡眠。在睡眠后的一段时间内它会起作用。
看起来甚至在创建对话框之前就调用了FindWindowEx,睡眠有助于创建对话框,因此有时它会起作用。
现在我在睡眠中设置了一些随机值。而且它看起来不是一个好的方法,因为它随时都可能失败。
是否有任何完整的证明方法,以便我可以在每次通过FindWindowEx处理,而不是使线程进入睡眠状态。
发布于 2010-02-04 03:35:35
如果您正在寻找的对话框是您的对话框--也就是说,您控制代码--那么您可以从您的对话框向您的观看应用程序发送一条消息,说:“哦,你好!”
如果对话框不是你的,并且你不想旋转,你可以在WM_CREATE消息上使用create a Windows hook。
发布于 2010-02-04 02:59:32
一种非常简单的解决方案是在循环中重复调用FindWindowEx。
HWND h = NULL;
while (1) {
h = FindWindowEx(...);
if (h) {
break;
}
Sleep(100);
}这并不是万无一失的--如果对话框永远不会打开,或者关闭得太快(尽管这是不太可能的),它就会无限循环。为了捕捉这两种情况,让主线程(创建和运行对话框)维护一个简单的bool属性,工作线程将查询该属性,以确定周围是否仍有对话框。
https://stackoverflow.com/questions/2194533
复制相似问题