2013-11-21 36 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