相关疑难解决方法(0)

如何在Python中生成键盘事件?

简短的摘要:

我正在尝试创建一个程序,将键盘事件发送到计算机,为了所有目的,模拟事件应被视为键盘上的实际击键.

原帖:

我正在寻找一种使用python生成键盘事件的方法.

假设函数接收到必须模拟按下的键,如下所示:

keyboardevent('a') #lower case 'a'
keyboardevent('B') #upper case 'B'
keyboardevent('->') # right arrow key

def keyboardevent(key):
    #code that simulated 'key' being pressed on keyboard
Run Code Online (Sandbox Code Playgroud)

以上显然是示例,但我正在寻找的是库,模块或其他,我可以用它来模拟键盘事件.

注意:这与将字符发送到记事本,或将文本输入字段等不同.我希望python脚本模拟一个实际的键盘事件,计算机会认为确实存在键盘事件.

额外注意:

我不想将键击发送到活动窗口 - 我希望系统能够相信键盘的按键被按下,微妙的区别,因为一些活动窗口不接受某些键组合,或者我想使用键盘快捷键对于通过我的脚本的后台进程,他们不需要通过活动窗口

到目前为止,我已经看过这些事情:

为最前面的应用程序生成键盘事件

如何通过Python生成键盘按键事件?

这些都是关于苹果的,并没有任何帮助.

还有这个:

哪种在Python上模拟键盘和鼠标的最简单方法?

这似乎可能是我需要的,但我找不到它的库或任何文档.

我也搜索了更多的地方,但还没有找到解决方案.

python keyboard-events

75
推荐指数
5
解决办法
16万
查看次数

适用于 Mac 和 Windows 的 python 3 中的定时输入

我需要在 Mac 和 Windows 上为 python 3 提供定时输入,如果用户没有时间,它会自动选择其中一个选项。我见过的问题的所有其他答案只有在用户按“Enter”键后才会终止。无论是否按下“Enter”键,我都需要它终止。

例如,在我的国际象棋程序中,如果5秒后没有输入,我需要它自动选择“Q”。另外,如果输入不在 [“Q”,“R”,“B”,“N”] 中,那么我还需要它来选择“Q”。

下面的代码不起作用。它会要求输入然后永远等待;计时器根本不工作。

def countdown():
    global timer
    timer = 5
    for x in range(timer):
        timer -= 1
        time.sleep(1)

countdownThread = threading.Thread(target=countdown)
countdownThread.start()

while timer > 0:
    promotedPiece = input("Promote to Q, R, B or N? >  ").upper()
    if timer == 0:
        break

if timer == 0:
    if promotedPiece not in ["Q", "R", "B", "N"]:  # If not valid input, choose Queen
        promotedPiece = "Q"
        print("Queen auto selected")
Run Code Online (Sandbox Code Playgroud)

python multithreading timer python-multithreading python-3.x

7
推荐指数
1
解决办法
605
查看次数

Python中的键回显在单独的线程中不显示第一个键击

我会尝试发布一个最小的工作示例,但不幸的是这个问题只需要很多部分,所以我尽可能地将其剥离.

首先,我使用一个简单的脚本来模拟通过函数调用按键.这是从这里调整的.

import ctypes

SendInput = ctypes.windll.user32.SendInput

PUL = ctypes.POINTER(ctypes.c_ulong)

class KeyBdInput(ctypes.Structure):
    _fields_ = [("wVk", ctypes.c_ushort),
                ("wScan", ctypes.c_ushort),
                ("dwFlags", ctypes.c_ulong),
                ("time", ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class HardwareInput(ctypes.Structure):
    _fields_ = [("uMsg", ctypes.c_ulong),
                ("wParamL", ctypes.c_short),
                ("wParamH", ctypes.c_ushort)]

class MouseInput(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
                ("dy", ctypes.c_long),
                ("mouseData", ctypes.c_ulong),
                ("dwFlags", ctypes.c_ulong),
                ("time",ctypes.c_ulong),
                ("dwExtraInfo", PUL)]

class Input_I(ctypes.Union):
    _fields_ = [("ki", KeyBdInput),
                 ("mi", MouseInput),
                 ("hi", HardwareInput)]

class Input(ctypes.Structure):
    _fields_ = [("type", ctypes.c_ulong),
                ("ii", Input_I)]

def getKeyCode(unicodeKey):
    k = unicodeKey
    curKeyCode = 0
    if k == …
Run Code Online (Sandbox Code Playgroud)

python windows keyboard multithreading python-multithreading

6
推荐指数
1
解决办法
407
查看次数