SendMessage застрял после нажатия кнопки
Странная проблема, которую я не могу понять. Ищите главное окно, затем я ищу кнопку управления с надписью "Пуск". После того, как он находит начало и посылает нажатие кнопки, он просто сидит и никогда не проходит мимо этого, поэтому я никогда не вижу "Уходящий цикл" в консоли.
Кнопка действительно нажимается, и появляется окно сообщения, на которое я продолжу отвечать за пределами этого раздела кода. Странно то, что как только я вручную отвечаю на это поле, оно выходит за пределы NativeMethods.SendMessage(start, BM_CLICK, IntPtr.Zero, ""); и я вижу "Leaving Loop", а потом все счастливы и продолжают свой путь.
Что мне здесь не хватает? Надеюсь, я объяснил это достаточно хорошо.
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 ответ
SendMessage
является синхронным вызовом: он ожидает обработки сообщения перед возвратом. Из вашего описания звучит так, что обработчик для BM_CLICK отображает модальное диалоговое окно, что означает, что SendMessage не вернется, пока модальное диалоговое окно не будет закрыто.
Пытаться PostMessage
вместо.