简短的摘要:
我正在尝试创建一个程序,该程序会将键盘事件发送到计算机,出于所有目的,模拟事件应视为键盘上的实际按键。
原始帖子:
我正在寻找一种使用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
上面显然是示例,但是我要寻找的是库,模块或其他任何可用来模拟键盘事件的库。
注意:这不同于将字符发送到记事本,或在字段等中输入文本。我希望python脚本模拟实际的键盘事件,计算机会认为确实存在键盘事件。
特别提示:
我不想将击键发送到活动窗口-我希望系统相信键盘的键被按下,这是细微的差别,因为某些活动窗口不接受某些键组合,或者我想使用键盘快捷键对于通过我的脚本进行的后台进程,它们不需要通过活动窗口
到目前为止,我已经看过这些东西:
为最前端的应用程序生成键盘事件
如何通过Python生成键盘按键事件?
都是关于苹果的,根本没有帮助。
还有这个:
在Python上模拟键盘和鼠标的最简单方法是什么?
似乎可能是我需要的,但是我找不到该库或任何文档。
我也搜索了更多地方,但尚未找到解决方案。
可以使用ctypes完成:
import ctypes
from ctypes import wintypes
import time
user32 = ctypes.WinDLL('user32', use_last_error=True)
INPUT_MOUSE = 0
INPUT_KEYBOARD = 1
INPUT_HARDWARE = 2
KEYEVENTF_EXTENDEDKEY = 0x0001
KEYEVENTF_KEYUP = 0x0002
KEYEVENTF_UNICODE = 0x0004
KEYEVENTF_SCANCODE = 0x0008
MAPVK_VK_TO_VSC = 0
# msdn.microsoft.com/en-us/library/dd375731
VK_TAB = 0x09
VK_MENU = 0x12
# C struct definitions
wintypes.ULONG_PTR = wintypes.WPARAM
class MOUSEINPUT(ctypes.Structure):
_fields_ = (("dx", wintypes.LONG),
("dy", wintypes.LONG),
("mouseData", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("time", wintypes.DWORD),
("dwExtraInfo", wintypes.ULONG_PTR))
class KEYBDINPUT(ctypes.Structure):
_fields_ = (("wVk", wintypes.WORD),
("wScan", wintypes.WORD),
("dwFlags", wintypes.DWORD),
("time", wintypes.DWORD),
("dwExtraInfo", wintypes.ULONG_PTR))
def __init__(self, *args, **kwds):
super(KEYBDINPUT, self).__init__(*args, **kwds)
# some programs use the scan code even if KEYEVENTF_SCANCODE
# isn't set in dwFflags, so attempt to map the correct code.
if not self.dwFlags & KEYEVENTF_UNICODE:
self.wScan = user32.MapVirtualKeyExW(self.wVk,
MAPVK_VK_TO_VSC, 0)
class HARDWAREINPUT(ctypes.Structure):
_fields_ = (("uMsg", wintypes.DWORD),
("wParamL", wintypes.WORD),
("wParamH", wintypes.WORD))
class INPUT(ctypes.Structure):
class _INPUT(ctypes.Union):
_fields_ = (("ki", KEYBDINPUT),
("mi", MOUSEINPUT),
("hi", HARDWAREINPUT))
_anonymous_ = ("_input",)
_fields_ = (("type", wintypes.DWORD),
("_input", _INPUT))
LPINPUT = ctypes.POINTER(INPUT)
def _check_count(result, func, args):
if result == 0:
raise ctypes.WinError(ctypes.get_last_error())
return args
user32.SendInput.errcheck = _check_count
user32.SendInput.argtypes = (wintypes.UINT, # nInputs
LPINPUT, # pInputs
ctypes.c_int) # cbSize
# Functions
def PressKey(hexKeyCode):
x = INPUT(type=INPUT_KEYBOARD,
ki=KEYBDINPUT(wVk=hexKeyCode))
user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
x = INPUT(type=INPUT_KEYBOARD,
ki=KEYBDINPUT(wVk=hexKeyCode,
dwFlags=KEYEVENTF_KEYUP))
user32.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))
def AltTab():
"""Press Alt+Tab and hold Alt key for 2 seconds
in order to see the overlay.
"""
PressKey(VK_MENU) # Alt
PressKey(VK_TAB) # Tab
ReleaseKey(VK_TAB) # Tab~
time.sleep(2)
ReleaseKey(VK_MENU) # Alt~
if __name__ == "__main__":
AltTab()
hexKeyCode是Windows API定义的虚拟键盘映射。代码列表在MSDN上可用:虚拟键代码(Windows)
本文向大家介绍vue如何监听键盘事件?相关面试题,主要包含被问及vue如何监听键盘事件?时的应答技巧和注意事项,需要的朋友参考一下 方法 addEventListener
键盘事件的种类 键盘事件由用户击打键盘触发,主要有keydown、keypress、keyup三个事件,它们都继承了KeyboardEvent接口。 keydown:按下键盘时触发。 keypress:按下有值的键时触发,即按下 Ctrl、Alt、Shift、Meta 这样无值的键,这个事件不会触发。对于有值的键,按下时先触发keydown事件,再触发这个事件。 keyup:松开键盘时触发该事件。
输入框接口 用于弹起输入框,供用户输入文字。可以通过注册监听函数进行监听用户的输入,监听完毕请及时调用注销方法,取消监听。 BK.UI.showKeyboard(Object) 显示输入框,弹出键盘 手Q版本:7.6.5 函数参数Object: 属性名 类型 是否必填 说明 deaultText string 否 默认要展示的字符串 complete Function 否 接口调用完成回调 示例:
对于桌面游戏,一般需要通过键盘做一些游戏内的控制,这时你就需要监听键盘事件。Cocos2d-x 支持键盘事件,就像上节介绍的触摸事件一样。 创建键盘事件监听器: // creating a keyboard event listener auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = CC_CALL
与响应鼠标事件相比,响应 Canvas 键盘事件没有那么直接,因为 Canvas 本身并不支持键盘事件的响应。我们需要耍一点小手段——在 Canvas 上添加一个支持键盘事件的其他对象。 本节的例程将在 7.2 节例程的基础上添加键盘响应事件。 html 部分变更的代码如下: //canvas_mk_event.html <canvas tabindex="0"></canvas>
我正在实现一个Javascript应用程序的屏幕键盘。文本应该出现在textarea元素中。我创建文本事件没有问题,但感觉无法创建非文本事件,如退格键。下面是一些示例代码: 这里有趣的函数是。我试图获得完全相同的事件,如按下物理键盘上的退格键,但没有成功。 我知道有一个Webkit-Bug,但希望有其他的方法来解决这个问题。有人有过同样的问题吗?能解决吗?怎么做?这里建议的解决方案(调用new)不