Как отправить событие keydown в неактивное окно в C++?

[C++] Как отправить событие keydown в неактивное окно?

Клавиша TAB работает нормально. Но у меня проблемы с другими клавишами, такими как "Z". Некоторое время гуглил, но пока не нашел решения.

Виртуальный ключ 0x5A должен быть правильным для буквы Z.

#include <iostream>
#include <Windows.h>
#include <string>

LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name
HWND hWindowHandle = FindWindow(NULL,Target_window_Name);

int main()
{
   //send TAB DOWN - WORKS FINE
   SendMessage(hWindowHandle,WM_KEYDOWN,0x09,0);
   //send TAB DOWN
   SendMessage(hWindowHandle,WM_KEYUP,0x09,0);

   //send Z DOWN - NOT WORKING
   SendMessage(hWindowHandle,WM_KEYDOWN,0x5A,0);
   //send Z UP
   SendMessage(hWindowHandle,WM_KEYUP,0x5A,0);

   return(0);
}

PS Keydown и Up события необходимы для того, что я пытаюсь сделать. Пробовал поиск из нескольких мест, но я пока не нашел решения.

1 ответ

Решение

Хорошо. Используйте Spy++ и перехватывайте сообщения, полученные Блокнотом, когда вы нажимаете Z ключ. Таким образом, вы можете имитировать / подражать точно так же, так что он будет выглядеть точно так же, как пользователь нажал Z ключ. Также вам нужно найти Edit класс в блокноте для отправки сообщений. Я сделал это, запустил Spy++, перехватил сообщения и написал то же самое. Теперь это работает:

#include <windows.h>
#include <iostream>
#include <string>



int main()
{
    LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name
    HWND hWindowHandle = FindWindow(NULL,Target_window_Name);
    HWND EditClass = FindWindowEx(hWindowHandle, NULL, "Edit", NULL);

    SendMessage(EditClass,WM_KEYDOWN,0x5A,0x002C0001);
    SendMessage(EditClass,WM_CHAR,0x7A,0x002C0001);
    SendMessage(EditClass,WM_KEYUP,0x5A,0xC02C0001);

   return(0);
}
Другие вопросы по тегам