함수 CGEventKeyboardSetUnicodeString은 UniCharCount 및 const UniChar unicodeString []을 사용합니다. pyobjc를 사용하여 파이썬에서 이것을 어떻게 호출 할 수 있는지 알아 내는데 어려움이 있습니다. 이상적으로, 나는 파이썬 유니 코드 문자열을 전달할 수 있기를 원합니다. 이 기능을위한 메타 데이터를 수정할 수있는 방법이 있나요? 또는 파이썬 유니 코드 문자열을 유니 코드 배열과 pyobjc 배열로 변환하는 방법이 있습니까?파이썬에서 CGEventKeyboardSetUnicodeString을 어떻게 호출 할 수 있습니까?
가 명확히하기 위해 : 나는
CGEventKeyboardSetUnicodeString의 메타 데이터 pyobjc의 버전 2.5.1을 사용하고
: 나는 시도했다
>>> pprint(CGEventKeyboardSetUnicodeString.__metadata__())
{'arguments': ({'already_cfretained': False,
'already_retained': False,
'null_accepted': True,
'type': '^{__CGEvent=}'},
{'already_cfretained': False,
'already_retained': False,
'type': 'L'},
{'already_cfretained': False,
'already_retained': False,
'null_accepted': True,
'type': '^T'}),
'retval': {'already_cfretained': False,
'already_retained': False,
'type': 'v'},
'variadic': False}
을 다음
>>> CGEventKeyboardSetUnicodeString(event, 1, 'a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: depythonifying 'pointer', got 'str'
>>> CGEventKeyboardSetUnicodeString(event, 1, u'a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: depythonifying 'pointer', got 'unicode'
>>> CGEventKeyboardSetUnicodeString(event, 1, [ord('a')])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: depythonifying 'pointer', got 'list'
>>> Quartz.CGEventKeyboardSetUnicodeString(event, 1, struct.unpack('>{}H'.format(1), u'a'.encode('utf-16-le')))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: depythonifying 'pointer', got 'tuple'
OK, 그것은 (최신 애플 릴리스 2.3.2a0이기 때문에, 당신은 수동으로 설치해야합니다) PyObjC 2.5.1처럼 보이는 내가 얘기 한 수정 프로그램이 ... 분명히 올바른 해결책이 아닙니다. 내가 한번 보자. – abarnert
Python 3.3.0 또는 2.7.5를 사용하여 2.4.0 또는 최상위 PyObjC에서이를 테스트 할 때 인수에 대해 서로 다른 정확한 메타 데이터를 얻습니다. 타입은'n^T'이며'c_array_length_in_arg = 1'을가집니다. 그리고 파이썬'unicode' 객체를 전달하면 잘 동작합니다. 당신은'CoreGraphics'가 아닌'Quartz'에서 함수를 사용하고 있습니다, 그렇죠? – abarnert
더보기 ... PyObjC 2.4.0이이 기능을 수정 한 것처럼 보입니다. 2.5.0이 (다른 방식으로) 다시 손상되었을 수 있으며, 2.6.0이 다시 수정 될 수 있습니다. 확실하지는 않지만, 내가 테스트 할 수있는 모든 버전을 설치하고, 내가 알 때 다시보고 할 것이다. 내가 옳다면 가장 좋은 해결 방법은 2.6 bridgesupport 파일을 2.5.1로 복사하는 것일 수도 있고 그렇지 않을 수도 있습니다 ...하지만 다시 한 번 알려 드리겠습니다. – abarnert