消息框中的孩子不会自动出现

时间:2012-04-17 21:51:28

标签: c# sendmessage findwindow

我正在尝试使用C#,FindWindowEx和SendMessage来尝试关闭另一个程序打开的消息框。

我能够获取消息框的句柄并通过Spy ++确认我有正确的句柄。

问题是,当消息框第一次出现时,它没有子节点(也用Spy ++确认)。

手动点击消息框后(用我的鼠标),然后显示子项,我可以找到按钮并以编程方式单击。但在那一点上,它显然毫无用处。

我找到消息框按钮的代码如下所示,其中hwnd是消息框的句柄:

        List<IntPtr> buttons = new List<IntPtr>();
        IntPtr button_box = User32.FindWindowEx(hwnd, IntPtr.Zero, "QWidget", "qt_msgbox_buttonbox");
        if (button_box != IntPtr.Zero) {
            IntPtr next_button = IntPtr.Zero;
            while (true) {
                next_button = User32.FindWindowEx(button_box, next_button, "QWidget", null);
                if (next_button != IntPtr.Zero) {
                    buttons.Add(next_button);
                }
                else {
                    break;
                }
            }
        }

再次,一旦孩子们在那里,它发现按钮没有问题。我只需要在他们出现之前点击。

为了“唤醒”孩子们,我尝试以编程方式“点击”框(通过发送WM_LBUTTONDOWN和WM__LBUTTONUP),调用SetForegroundWindow(hwnd),并发送WM_ACTIVATE。这些似乎都不起作用。有什么想法吗?

0 个答案:

没有答案