2011-04-21 2 views
5

OSX 사용자가 텍스트 필드/영역에 텍스트를 입력하는지 여부를 감지하는 데 필요한 ObjC 코드를 알아 내려고합니다. 특별한 키 바인딩과 텍스트 확장을 제공하고 싶습니다. 나는 키 스니퍼를 쓰지 않을거야.Mac OS X에서 텍스트 입력을 필터링하고 무시하는 방법

커서가 숨겨져 있는지 또는 커서 모드가 IBeam인지 감지하여이 작업을 시도했지만 작동하지 않습니다. 예를 들어 거짓 긍정은 Chrome에서 탭을 전환 할 때 커서를 숨겨서 사용자가 텍스트 입력 모드에 있지 않지만 커서가 숨겨져있는 경우입니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

어떤 종류의 키 바인딩과 자동 완성을 추가하고 싶습니까? OS X의 텍스트 시스템은 이미 매우 강력하기 때문에 필요한 작업을 수행하지 못하면 기존의 키 바인딩 및 완료 시스템과 충돌하지 않도록주의해야합니다. 또한 태그가 중복되어 충돌합니다. Cocoa 솔루션, Carbon 솔루션 또는 둘 다를 원하십니까? 그리고 appkit 태그는 필요 없습니다. – user57368

+1

@ Josh Caswell - 지금 해결되었습니다. 죄송합니다. 잠시 여기에 없었습니다. –

+0

@ user57368 - 해결책을 취하겠습니다. 다른 태그가 다른 경험을 가진 사람들을 끌어들일 수 있다고 생각했습니다. –

답변

3

Accessibility API을 사용하여 포커스가있는 현재 UI 요소를 찾은 다음 역할 설명을보고 텍스트 입력인지 확인했습니다.

+0

이 링크는 이제 죽었습니다. 따라서 답변에 코드를 추가하는 것이 좋습니다. –

0

입력 방법을 직접 작성하여 모든 텍스트 입력을 가로 채고 무시할 수 있습니다. 프로그래밍 방식으로 (collection of 5 code samples) 또는 text-based rule file (덜 강력한 옵션)으로 할 수 있습니다.

+0

그건 생각이지만 ... 사용자가 처음에 텍스트 입력 상태에 들어갈 때를 감지하고 싶습니다. 나는이 방법이 텍스트가 입력 된 후에 만 ​​탐지 할 것이라고 생각한다. –

0

the Default Key Bindings dictionary 또는 Snow Leopard의 내장 텍스트 대체 기능으로 원하는 것이 있다면 앱을 작성하지 않아도됩니다. 후자는 시스템 환경 설정의 언어 및 텍스트 패널에있는 텍스트 탭을 참조하십시오.

사용자가 "텍스트 입력"모드를 전역 적으로 입력하면 응용 프로그램 수준에서 정의되므로 감지 할 수 없습니다. AppKit 프레임 워크에서 제공하는 텍스트 시스템 내에서 (위와 같이) 특정 작업을 수행 할 수 있지만 Adobe 응용 프로그램 및 Flash 무비의 텍스트 입력 필드와 같이 사용하지 않는 응용 프로그램에는 영향을 미치지 않습니다. 예 : "최고 점수 판의 이름 입력 :"). 시스템 전체에 존재하는 유일한 것들은 텍스트 입력의 개념보다 훨씬 낮은 키 이벤트와 암호 필드와 같은 것들을위한 보안 텍스트 모드 [1]입니다.

[1] : TN2150은 "보안 이벤트 입력"모드가 작동하는 방식과 이에 대한 수동 인터페이스를 설명합니다. 대부분의 (코코아) 응용 프로그램은 NSSecureTextField를 사용하기 때문에 열심히 노력합니다.