2013-05-02 3 views
0

Странный вопрос Я не могу нанести палец. Найдите главное окно, затем я ищу кнопку управления кнопкой с надписью «Пуск». После того, как он находит начало и отправляет щелчок на кнопке, он просто сидит и никогда не проходит мимо, поэтому я никогда не вижу «Конец цикла» в консоли.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; 
     } 
} 

}

ответ

2

SendMessage является синхронным вызовом: он ждет сообщений для обработки перед возвратом. Из вашего описания это похоже на то, что обработчик BM_CLICK отображает модальное диалоговое окно, что означает, что SendMessage не вернется, пока модальный диалог не будет отклонен.

Попробуйте PostMessage вместо этого.

+0

Это исправило проблему. Огромное спасибо, что я не знал об этом. – Tsukasa

Смежные вопросы