给定一个字符串,我希望能够发送一组击键来键入该字符串,并且我希望能够在 OSX 上的 python 中完成它(在 python 中,因为它是已经用 python 编写的更大项目的一部分,在 OSX 上,因为我正在尝试将其移植到 OSX)。
我现在可以像这样使用 pyobj 来做到这一点(这有点简化):
from Quartz import *
CHAR_TO_SEQUENCE = {
'a':[(0, True), (0, False)]
}
def send_string(string):
for c in string:
sequence = CHAR_TO_SEQUENCE[c]
for keycode, key_down in sequence:
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(None, keycode, key_down))
我已经充实了 CHAR_TO_SEQUENCE 以包含我可以在键盘上输入的大部分内容,这需要一段时间并且很乏味。
这样做的问题是:
- 它仅在键盘具有 ANSII 标准布局时才有效。例如,如果有人使用法语键盘,它会输入错误的内容。
- 它需要这张可笑的桌子。
我为 OSX 找到了这个通用解决方案,但不知道如何将其应用于 python: 如何将 ASCII 字符转换为 CGKeyCode?
那里提到的 API 似乎无法通过 pyobj 获得(或者我只是无法弄清楚导入路径)。
我已经看到一些建议将 CGEventKeyboardSetUnicodeString 设置为所需的字符串,而不必担心键码。但是我无法弄清楚如何从 python 调用 CGEventKeyboardSetUnicodeString (我无法正确获取参数)并且不清楚这是否会起作用,因为文档说应用程序可以选择忽略它以支持键码。
有没有办法在 OSX 上的 python 中做到这一点?