如何在OSX上的python中将字符串转换为一组击键

时间:2012-06-01 14:07:05

标签: python macos

给定一个字符串,我希望能够发送一组键击来键入该字符串,我希望能够在OSX上的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: How to convert ASCII character to CGKeyCode?

那里提到的API似乎没有通过pyobj可用(或者我可能无法弄清楚导入路径)。

我已经看到一些suggestions将CGEventKeyboardSetUnicodeString设置为所需的字符串,而不用担心密钥代码。但我无法弄清楚如何从python中调用CGEventKeyboardSetUnicodeString(我无法正确获取参数)并且不清楚这是否有效,因为文档说应用程序可以选择忽略它而支持键代码。

有没有办法在OSX上的python中执行此操作?

1 个答案:

答案 0 :(得分:1)

看起来Carbon模块没有包装TIS *功能,也没有其他功能。

你可以扩展PyObjC,但是只需构建一个包含实际需要的两个函数的普通扩展模块就更简单了。

由于这样做比解释如何操作更快,你可以从https://github.com/abarnert/pykeycode获得它,只需执行通常的“python setup.py build_ext --inplace”或“sudo python setup”。 py install“,然后查看test.py以了解如何使用它。