2011-03-10 3 views
2

내 응용 프로그램에서는 키보드의 "1"키 왼쪽에있는 키에 바로 가기를 매핑해야합니다. 표준 미국 키보드에서 이것은 백틱 문자 ("`", 키 코드 번호 50)입니다. 불행히도 국제 키보드 (예 : 프랑스어 키보드)는 1 키 왼쪽에 다른 키를 가지고 있습니다 (슬래시 키 "/")를 사용하므로 키 코드를 하드 코딩하면 미국 키보드를 사용하지 않는 사용자에게 예기치 않은 결과가 발생할 수 있습니다.다국어 키보드 용 CGKey 코드 변환

미국 키 코드를 런타임에 다국어 키보드의 키 코드로 변환하거나 키보드의 키 위치를 기준으로 프로그래밍 방식으로 키 코드를 결정하는 방법이 있습니까?

+0

내가 틀렸다고 정정 해 주지만 Objective-C 문제인 것처럼 들리지만 C 문제는 아닙니다. 그와 같은 태그를 붙이고 ('obejctive-c'의 철자를 수정 함). –

+0

Carbon 텍스트 입력 API가 C로 작성 되었기 때문에이 두 태그로 태그를 붙 였지만 Objective-C에도 해결책이있을 수 있습니다. – indragie

+0

탄소가 더 이상 지원됩니까? http://en.wikipedia.org/wiki/Carbon_(API)는 답변이 '아니오'인 것처럼 들리게합니다. –

답변

3

"1"왼쪽의 키에있는 문자은 다른 키보드 레이아웃에서 다르지만 가상 키 코드는 동일해야합니다. HIToolbox/Events.h을 보면, 당신이 말하는 열쇠를 나타내는 상수 kVK_ANSI_Grave을 볼 수 있습니다. 상수 목록 위에는 가상 키 코드 수준에서 평등이란 물리적 키가 동일하다는 것을 나타내는 주석이 있지만 스캔 코드는 다를 수 있지만 방출되는 문자는 다를 수 있습니다.

즉, 키보드 드라이버는 스캔 코드에서 가상 키 코드로 매핑되고 키보드 레이아웃 (시스템 환경 설정에서 변경할 수 있음)은 가상 키 코드에서 문자로 매핑됩니다.

이것은 모두 잘못되었을 수 있습니다. 나는 이러한 주장을 검증 할 수있는 비 미국 키보드가 없다.

+0

그게 저에게 탄소 키보드 이벤트 API가 사용하는 핵심 코드입니까? 위에서 언급 한 가상 코드를 기반으로합니까? 아니면 그 특정 문자로 하드 코딩되어 있습니까? – indragie

+0

사실, CGKeyCode는 Mac OS X의 거의 모든 곳에서 사용되는 것과 동일한 가상 키 코드입니다.이 목록과 관찰 내용 모두에서 십진수 50을 사용하여 무덤 키를 나타내는 사실은 긍정적 인 신호입니다. –

+0

문제는 배송 응용 프로그램에서 해당 키 코드를 사용하고 있으며 키보드에있는 키의 위치가 아니라 문자에 매핑하는 버그 보고서가 여러 개 있습니다. – indragie

관련 문제