单击按钮后SendMessage卡住了

时间:2013-05-02 04:41:37

标签: c# sendmessage native-methods findwindow findwindowex

奇怪的问题我无法指责。 搜索主窗口,然后我搜索标题为“开始”的按钮控件。 找到开始并发送按钮点击后,它就会停下来,永远不会过去,所以我从未在控制台中看到“离开循环”。

按下按钮并弹出一个消息框,我将继续在此部分代码之外回答。奇怪的是,一旦我手动回答该框,它就会突破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;
       }
 }   

}

1 个答案:

答案 0 :(得分:2)

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

请尝试PostMessage