2013-02-15 3 views
1

Я хочу открыть программу Microsoft Security Essential и нажать кнопку «Сканировать сейчас» с помощью VC. Я могу найти окно, но не могу найти контроль. Это мой код, когда я запускаю этот код, который показывает, что элемент управления не найден. Я пытаюсь проверить этот код нажатием кнопки «Обзор» в программе «Запуск», но при попытке использовать с Microsoft Security Essential он не нашел контроля. Я не знаю, почему этот элемент управления находится в Tab. Как использовать FindWindowEx() Нажмите кнопку «Сканировать сейчас» в Microsoft Security Essential?Я не могу использовать FindWindowEx(), чтобы найти элемент управления

int run_ms(){ 

    ShellExecute(NULL, L"open", L"C:/Program Files/Microsoft Security Client/msseces.exe", NULL, NULL, SW_SHOWNORMAL); 

     HWND w; 
    w=FindWindow(NULL, L"Microsoft Security Essentials"); 

     if(w==NULL) 
       MessageBox(NULL,L"Not found",L"",MB_OK); 

     else{ 
       HWND cb; 
       cb = FindWindowEx(w,NULL,NULL,_T("&Scan now"));  

      if(cb!=NULL) 
      { 
       SendMessage(cb,WM_LBUTTONDOWN, NULL,NULL); 
       SendMessage(cb,WM_LBUTTONUP, NULL,NULL); 
      } 
      else 
       MessageBox(NULL,L"Control not found",L"",MB_OK); 
     } 

      return 0; 
} 

Я использую Spy ++ с помощью кнопки в Microsoft Security Essential это показать, как этот

Caption : &Scan now 
Class : ALT:BUTTON 
I use FindWindowEx() like this cb = FindWindowEx(w,NULL,NULL,_T("&Scan now")); 

но не нашли контроля.

+0

Вы пытались опустить «&»? Это отображает shortcurt, я думаю ... –

+0

Нет - '&' является частью текста окна и не может быть пропущена. Это необходимо. –

ответ

6

Функция FindWindowEx не будет «сверлить» в иерархии окон - она ​​будет рассматривать только дочерние окна того, что вы просите, чтобы искать. С учетом сказанного и быстро просмотрев скриншот пользовательского интерфейса Microsoft Security Essentials, я на 99% уверен, что кнопка «Сканировать сейчас», которую вы ищете, не является прямым дочерним окном основных средств безопасности Microsoft Окно. И вот почему ваш вызов FindWindowEx терпит неудачу.

У меня нет доступа к программному обеспечению Microsoft Security Essentials, но с доступом к Spy++ должно быть легко найти, кто родитель кнопки «Сканировать сейчас»: это окно Microsoft Security Essentials или другое окно, которое , сам, дочерний элемент окна Microsoft Security Essentials.

+1

+1 Это все. Иерархия - это Microsoft Security Essentials | Сводная панель просмотра | Панель информации о статусе | & Scan теперь, так что после FindWindow, который получает окно верхнего уровня, должно быть три вызова FindWindowEx. На мой взгляд, это похоже на работу для EnumChildWindows. –

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