2013-11-21 100 views
-1

我想創建一個程序,它模擬按鍵或只寫一個文本到特定的應用程序窗口。 這是我試過的,但它似乎沒有工作。C++發送密鑰到一個窗口

void MainWindow::on_startButton_clicked() 
{ 
    HWND windowname = FindWindow(NULL, L"<mywindowname>"); 
    SendMessage(windowname, WM_SETTEXT, NULL, (LPARAM)"Window"); 
} 

任何想法?

+0

你可能會想該文本是一個寬字符串,但除非那是你自己的窗口,你可能與'SetWindowText'更好。 – chris

+0

@chris會改變窗口標題嗎?因爲那不是我想要的 – Davlog

+1

@Davlog:'WM_SETTEXT'大部分是一樣的......如果你想模擬按鍵,你必須使用'SendInput'或單獨的'WM_KEYDOWN' /'WM_KEYUP'(但是如果應用程序繞過正常關鍵信息獲取輸入,他們將無法正常工作)。 –

回答

0

所以我今天發現SendMessage只會發送一個字符(至少它是我的問題的解決方案)。所以對於一個字符串,我必須爲它中的每個字符執行以下操作。

QString string = "Hello"; 
foreach(QChar c, string){ 
    SendMessage(windowname, WM_KEYDOWN, (int)c-0x20, 0); 
    SendMessage(windowname, WM_CHAR, (int)c-0x20, 0); 
    SendMessage(windowname, WM_KEYUP, (int)c-0x20, 0); 
} 

For more information about this function and deeper details on WM_KEY's etc. click here