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:
+29
-24
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user