我正在写一个脚本来自动运行一个特定的模型。 当模型失败时,它等待用户input(回车键)。 我可以检测模型何时失败,但我不能使用python(在Linux上)来模拟按键事件。 Windows有SendKeys库来做到这一点,但我想知道是否有一个类似的库在Linux上的Python。 谢谢!
我需要一个函数,给定一个字符,返回与当前键盘布局上该字符位置相关联的CGKeyCode 。 例如,给定“b”,如果使用US QWERTY,它应该返回kVK_ANSI_B kVK_ANSI_N如果使用Dvorak,则返回kVK_ANSI_B 。 为此,Win32 API具有函数VkKeyScan() 。 X11具有函数XStringToKeySym() 。 在CG API中有这样一个函数吗? 我需要这个为了传递一个参数到CGEventCreateKeyboardEvent() 。 我已经尝试使用CGEventKeyboardSetUnicodeString()来代替,但显然不支持修饰符标志(我需要)。 我已经广泛search这个,但找不到一个体面的答案。 目前我正在使用下面的代码( 可以在线find ),它可以工作,但并不完美(而且很难破译如何简化),我不想在生产代码中使用它: #include <stdint.h> #include <stdio.h> #include <ApplicationServices/ApplicationServices.h> CGKeyCode keyCodeForCharWithLayout(const char c, const UCKeyboardLayout *uchrHeader); CGKeyCode keyCodeForChar(const char c) { CFDataRef currentLayoutData; TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); if (currentKeyboard == NULL) { fputs("Could not find keyboard layout\n", stderr); […]
search几个小时后,我想知道是否有可能模拟keydown键盘上的按下。 例如,我希望我的程序按住“x”键五秒钟,所以当我在记事本中运行它时,会看起来像这样: xxxxxxxxxxxxx 。 我在网上尝试了不同的代码,到目前为止我能find的最好的东西是: import ctypes import time user32 = ctypes.windll.user32 inputhex = raw_input("Please enter your desired key's code (HEX): ") keycode = int(inputhex, 16) time.sleep(1) #VOID keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, PTR dwExtraInfo); user32.keybd_event(keycode,0,2,0) #is the code for KEYDOWN time.sleep(5) #user32.keybd_event(keycode,0,0,0) #is the code for KEYDUP[/code] Sendkey模块不能解决我的问题,因为它只允许你发送一个按键,而不是一个保持键按下的事件。 我知道过去使用它,但我真的想知道这是否可能与python和如何。 PS我正在使用Python的窗户