2014-04-24 3 views
3

이것은 첫 번째 게시물이므로 편집이 필요한지 알려주세요.CGEventSetFlags - 로컬 문자열에서 시프트 수정 자 키가 필요한 경우 확인하십시오.

저는 현재 Apple 키보드의 가상 키 코드를 char을 전달하여 반환하는 함수를 가지고 있습니다. CGKeyCode keyCodeForChar(), 그것은 작동하고 다양한 웹 소스에 대한 결과를 확인했습니다.

로컬 문자열 (예 : NSString *myString = @"Hello World!")을 세분화하고 각 문자를 처리하고 CGKeyCode를 검색 한 후 CGEventPost()을 사용하여 쓰려고했습니다. 그러나이 작업은 문자를 대문자로 입력해야하는 경우 올바른 플래그를 감지하려고 시도 할 때 전체 문자열이 소문자로 인쇄됩니다. 이것은 지금까지 내 코드입니다 : '!'

NSString *myString = @"Hello World!"; 
if (![self.view.window isKeyWindow]) 
{ 
    for (int i = 0; i < myString.length; i++) 
    { 
     char c = [theString characterAtIndex:i]; 
     CGKeyCode keyCode = keyCodeForChar(c); 

     CGEventRef event; 
     CGEventFlags flags = kCGEventFlagMaskShift; 
     CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); 

     // Key down event 
     event = CGEventCreateKeyboardEvent(source, keyCode, true); 
     CGEventSetFlags(event, (flags & CGEventGetFlags(event))); 
     CGEventPost(kCGHIDEventTap, event); 
     CFRelease(event); 

     // Key up event 
     event = CGEventCreateKeyboardEvent(source, keyCode, false); 
     CGEventSetFlags(event, (flags & CGEventGetFlags(event))); 
     CGEventPost(kCGHIDEventTap, event); 
     CFRelease(event); 

     CFRelease(source); 
    } 
} 

는 현재 출력, hello world1입니다 같은 CGKeyCode에서 오는 1. 따라서 올바른 플래그 마스크를 감지하는 것이 잘못되었다고 생각합니다. 내가 비슷한 질문을 살펴 보았다는 여기에 질문 :

Obtaining modifier key pressed in CGEvent tap

사람이 내가 될 것이라고 잘못 가고 어디를 도와 줄 수 있다면 솔루션, 나를 위해 일하지 않은이 그러나

CGEventPost - possible bug when simulating keyboard events?

훌륭한!

미래 수색자를 들어, 크레이그

답변

1

감사 :이어야한다 (플래그 | CGEventGetFlags (이벤트)) 변화가 이미 적용되어있는 경우하지 & ... 다른 현명한 변화에만 적용됩니다.

시프트를 눌러야하는 시점을 결정할 때 keyCodeForChar 함수는 Windows에서 VkKeyScan()과 유사한 추가 정보를 제공해야합니다.