[feat] keyboard control supported on Windows

This commit is contained in:
dijunkun
2024-11-22 17:17:33 +08:00
parent 3f777e4662
commit 8414a57a5b
7 changed files with 29 additions and 3 deletions

View File

@@ -9,3 +9,7 @@ int KeyboardCapturer::Hook(OnKeyAction on_key_action, void *user_ptr) {
}
int KeyboardCapturer::Unhook() { return 0; }
int KeyboardCapturer::SendKeyboardCommand(int key_code, bool is_down) {
return 0;
}

View File

@@ -17,6 +17,7 @@ class KeyboardCapturer : public DeviceController {
public:
virtual int Hook(OnKeyAction on_key_action, void *user_ptr);
virtual int Unhook();
virtual int SendKeyboardCommand(int key_code, bool is_down);
private:
};

View File

@@ -9,3 +9,7 @@ int KeyboardCapturer::Hook(OnKeyAction on_key_action, void *user_ptr) {
}
int KeyboardCapturer::Unhook() { return 0; }
int KeyboardCapturer::SendKeyboardCommand(int key_code, bool is_down) {
return 0;
}

View File

@@ -17,6 +17,7 @@ class KeyboardCapturer : public DeviceController {
public:
virtual int Hook(OnKeyAction on_key_action, void *user_ptr);
virtual int Unhook();
virtual int SendKeyboardCommand(int key_code, bool is_down);
private:
};

View File

@@ -53,3 +53,16 @@ int KeyboardCapturer::Unhook() {
UnhookWindowsHookEx(keyboard_hook_);
return 0;
}
int KeyboardCapturer::SendKeyboardCommand(int key_code, bool is_down) {
INPUT input = {0};
input.type = INPUT_KEYBOARD;
input.ki.wVk = key_code;
if (!is_down) {
input.ki.dwFlags = KEYEVENTF_KEYUP;
}
SendInput(1, &input, sizeof(INPUT));
return 0;
}

View File

@@ -19,6 +19,7 @@ class KeyboardCapturer : public DeviceController {
public:
virtual int Hook(OnKeyAction on_key_action, void *user_ptr);
virtual int Unhook();
virtual int SendKeyboardCommand(int key_code, bool is_down);
private:
HHOOK keyboard_hook_ = nullptr;

View File

@@ -103,7 +103,9 @@ int Render::SendKeyEvent(int key_code, bool is_down) {
}
int Render::ProcessKeyEvent(int key_code, bool is_down) {
LOG_ERROR("key code [{}], is down [{}]", key_code, is_down);
if (keyboard_capturer_) {
keyboard_capturer_->SendKeyboardCommand(key_code, is_down);
}
return 0;
}