Refactor input handling to unify mouse and keyboard input structures. Update key event processing to support extended key flags and improve error logging for input operations. Adjust key mappings for consistency across input types.

This commit is contained in:
2026-08-28 13:20:04 +03:00
parent 2a6680c5bf
commit ea71090a53
5 changed files with 125 additions and 86 deletions
+29 -24
View File
@@ -26,43 +26,48 @@ func PressKey(key, action string, modifiers []string) error {
modVKs = append(modVKs, modVK)
}
var inputs []winInput
for _, modVK := range modVKs {
if err := sendKeyEvent(modVK, false); err != nil {
return err
}
inputs = append(inputs, keyInput(modVK, false))
}
switch strings.ToLower(strings.TrimSpace(action)) {
case "down":
if err := sendKeyEvent(vk, false); err != nil {
return err
}
inputs = append(inputs, keyInput(vk, false))
case "up":
if err := sendKeyEvent(vk, true); err != nil {
return err
}
inputs = append(inputs, keyInput(vk, true))
default:
if err := sendKeyEvent(vk, false); err != nil {
return err
}
if err := sendKeyEvent(vk, true); err != nil {
return err
}
inputs = append(inputs, keyInput(vk, false), keyInput(vk, true))
for i := len(modVKs) - 1; i >= 0; i-- {
if err := sendKeyEvent(modVKs[i], true); err != nil {
return err
}
inputs = append(inputs, keyInput(modVKs[i], true))
}
return nil
}
return nil
return sendKeyboardInputs(inputs)
}
func sendKeyEvent(vk uint16, keyUp bool) error {
func keyInput(vk uint16, keyUp bool) winInput {
flags := uint32(0)
if keyUp {
flags = keyeventfKeyup
flags |= keyeventfKeyup
}
if isExtendedVK(vk) {
flags |= keyeventfExtended
}
return winInput{
Type: inputKeyboard,
Ki: keyboardData{
Vk: vk,
Flags: flags,
},
}
}
func isExtendedVK(vk uint16) bool {
switch vk {
case 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x2D, 0x2E, 0x5B, 0x5C, 0x5D:
return true
default:
return false
}
inputs := []keybdInput{{Type: inputKeyboard, Vk: vk, Flags: flags}}
return sendKeys(inputs)
}