2011-11-27 127 views
0

我想向外部應用程序發送一些按鍵,並且它工作正常,但是當我嘗試將按鍵發送到相同外部應用程序的子窗口時,出於某種原因不起作用,所以我需要幫助。假設我們想從記事本中打印剪貼板文本,並希望一步完成。代碼看起來像這樣。如何在Windows中從外部應用程序激活某個窗口?

 #include <windows.h> 
    #include <stdio.h> 
    #include <iostream.h> 
    using namespace std; 

    int main(int argc, char* argv[]){ 
     WinExec("notepad", 1); 
     Sleep(1000); 
     HWND handle = FindWindow("notepad",0); // it's handling as well 
     SetForegroundWindow(handle);   
     keybd_event(VK_CONTROL, 0, 0, 0); // simulate CTRL down 
     keybd_event(VkKeyScan('V'), 0, 0, 0); 
     keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); 
     Sleep(500); 
     keybd_event(VK_CONTROL, 0, 0, 0); // simulate CTRL down 
     keybd_event(VkKeyScan('P'), 0, 0, 0); 
     keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // simulate CTRL up 
     Sleep(1000); 
     HWND handle1 = FindWindow(0, "Print"); // it wann't find "Print" window 
     SetForegroundWindow(handle1); 
     keybd_event(VK_MENU, 0, 0, 0); // simulate ALT down 
     keybd_event(VkKeyScan('P'), 0, 0, 0); 
     keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); 
     return 0; 
    } 

但它想要發送ALT + P到「打印」窗口,爲什麼? 最終目標是讓小宏,發送到應用程序keystorkes(在任何Windows孩子或父母..) OS:WIN 7 64位

+0

目標應用程序是記事本(如果我明白了) –

+0

是的,但問題是如何激活「打印」窗口,這不是外部應用程序的主窗口(我無法找到激活它們的方法) c/C++ –

+0

對不起,我的攝取速度有點慢。如果你想要做的只是打印一個文本文件,然後發送動詞'print'給ShellExecute,傳遞文本文件名作爲文件名。我有一種感覺,如果你告訴我們你總體目標會有一個相當微不足道的解決方案。假投入真的應該是最後的手段。 –

回答

0

你也許可以使現有的代碼(在某種程度上)的工作,只需去除這些行:

HWND handle1 = FindWindow(0, "Print"); // it wann't find "Print" window 
SetForegroundWindow(handle1); 

記住,僞造輸入變到具有輸入焦點,當你表現出在記事本中打印對話框,該對話框將獲得輸入焦點的線程。你根本不需要設定焦點,系統會爲你做到這一點。

但是,你採取的方法是非常脆弱的。我懷疑用UI Automation這樣的東西會更好。

+0

thnx人它的工作... ... –

相關問題