- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
给定一个字符串,我希望能够发送一组击键来键入该字符串,并且我希望能够在 OSX 上的 python 中完成(在 python 中,因为它已经是一个更大项目的一部分在 OSX 上用 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 标准布局时有效。例如,如果有人使用法语键盘,它会输入错误的内容。
- 它需要这张可笑的 table 。
我找到了这个适用于 OSX 的通用解决方案,但不知道如何将它应用到 python: How to convert ASCII character to CGKeyCode?
那里提到的 API 似乎无法通过 pyobj 获得(或者我只是想不出导入路径)。
我看过一些 suggestions将 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 以了解如何使用它。
关于python - 如何在 OSX 上的 python 中将字符串转换为一组击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851804/
我是一名优秀的程序员,十分优秀!