0

奇怪的问题,我无法解决。搜索主窗口,然后搜索标题为“开始”的按钮控件。在它找到开始并发送按钮点击后,它只是坐在那里,永远不会过去,所以我从来没有在控制台中看到“离开循环”。

该按钮确实被按下并弹出一个消息框,我将在这部分代码之外继续回答。奇怪的是,一旦我手动回答该框,它就会中断 NativeMethods.SendMessage(start, BM_CLICK, IntPtr.Zero, ""); 我看到“离开循环”,然后一切都很开心,继续前进。

我在这里想念什么?希望我解释得足够好。

while (!mainFound)
{
    hwnd = NativeMethods.FindWindow(null, "Loader");
    if (!hwnd.Equals(IntPtr.Zero))
    {
        Console.WriteLine("Found Main");

        IntPtr p = IntPtr.Zero;
        while (!mainFound)
        {
            hwndChild = NativeMethods.FindWindowEx(hwnd, p, null, null);
            if (hwndChild == IntPtr.Zero)
            {
                 break;
            }

            IntPtr start = NativeMethods.FindWindowEx(hwndChild, IntPtr.Zero, null, "Start");
            if (!start.Equals(IntPtr.Zero))
            {
                Console.WriteLine("Found Start");
                NativeMethods.SendMessage(start, BM_CLICK, IntPtr.Zero, "");
                Console.WriteLine("Leaving Loop");
                mainFound = true;
            }

             //Console.WriteLine(hwndChild);
             p = hwndChild;
       }
 }   

}

4

1 回答 1

2

SendMessage是一个同步调用:它在返回之前等待消息被处理。根据您的描述,听起来 BM_CLICK 的处理程序显示了一个模式对话框,这意味着 SendMessage 在模式对话框被关闭之前不会返回。

试试PostMessage吧。

于 2013-05-02T04:48:48.613 回答