繁体   English   中英

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

[英]How to convert a string into a set of keystrokes in python on OSX

给定一个字符串,我希望能够发送一组击键来键入该字符串,并且我希望能够在OSX上的python中进行操作(在python中,因为它是已经用python编写的更大项目的一部分,因为我正在尝试将其移植到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中做到这一点?

似乎Carbon模块没有包装TIS *功能,也没有其他功能。

您可以扩展PyObjC,但是只构建一个简单的扩展模块来包装您实际需要的两个功能要简单得多。

因为这样做比解释方法要快,所以可以从https://github.com/abarnert/pykeycode获取它,只需执行通常的“ python setup.py build_ext --inplace”或“ sudo”即可。 python setup.py install”,然后查看test.py以了解如何使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM