2013-02-15 24 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; 
} 

我用間諜++與按鈕,在微軟安全必備它表明這樣

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

,但沒有找到控制。

+0

您是否嘗試省略「&」?這將顯示shortcurt,我猜... – 2013-02-15 09:26:34

+0

否 - '&'是窗口文本的一部分,不得ommitted。這是必需的。 – 2013-02-15 18:21:53

回答

6

FindWindowEx功能不會「鑽」到窗口層次 - 它只會看子窗口不管你問它來搜索。隨着中說,從快看微軟Security Essentials的用戶界面的屏幕截圖,我99%肯定,「立即掃描」按鈕,您要找的是不是主要的微軟安全必備的直接子窗口窗口。這就是爲什麼你的FindWindowEx調用失敗。

我沒有權限訪問Microsoft Security Essentials軟件,但通過訪問Spy++,應該很容易找到「立即掃描」按鈕的父母是:Microsoft Security Essentials窗口還是另一個窗口,它本身就是Microsoft Security Essentials窗口的孩子。

+1

+1就是這樣。層次結構是Microsoft Security Essentials |摘要視圖面板|狀態信息面板|和掃描現在這麼有需要三個是獲取頂層窗口的FindWindow函數後FindWindowEx調用。這似乎是在我看來EnumChildWindows工作。 – 2013-02-15 19:37:26

相關問題