How can I fire a key press or mouse click event without touching any input device at system level?

后端 未结 4 2352
小鲜肉
小鲜肉 2020-12-14 05:15

How can I fire an automatic key press or mouse click event when a color appears on the screen on other application or browser?

4条回答
  •  清歌不尽
    2020-12-14 05:35

    It depends a lot on what you want. Do you want to send the keys to

    • your Application
    • another fixed Application
    • Simulate a global keypress

    Simulating keys globally

    All of these will cause problems targeting a specific application and the active window changes.

    • SendKeys Sends Messages to the active app. It's a high level function taking a string which encodes a sequence of keys.

    • keybd_event is very low level and injects a global keypress. In most cases SendKeys is easier to use.

    • mouse_event simulates mouse input.

    • SendInput supersedes these functions. It's more flexible but a bit harder to use.

    Sending to a specific window

    When working with a fixed target window, sending it messages can work depending on how the window works. But since this doesn't update all states it might not always work. But you don't have a race condition with changing window focus, which is worth a lot.

    • WM_CHAR sends a character in the basic multilingual plane (16 bit)
    • WM_UNICHAR sends a character supporting the whole unicode range
    • WM_KEYDOWN and WM_KEYUP Sends keys which will be translated to characters by the keyboard layout.

    My recommendation is when targeting a specific window/application try using messages first, and only if that fails try one of the lower level solutions.

提交回复
热议问题