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

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