2009-11-29 6 views
2

안녕하세요 키보드에서 입력을 가져 오는 프로그램을 만들고 있는데 키보드에서 입력을 받아 NSString 개체에 저장하는 방법이 있는지 궁금합니다. 당신이 명령 줄 응용 프로그램으로이 일을하는 경우Objective-C 키보드에서 입력을 읽는 방법

+0

어떤 종류의 프로그램입니까? 아마도 필드가 자신의 입력을 처리하기 때문에 전통적인 GUI가 아닐 것입니다. 콘솔 앱? 또는 도구, la Photoshop을위한 키보드 단축키를 가진 무언가? 게임? –

답변

6

, 여기에 내가 명령 프롬프트에서 선을 얻기 위해 지난 주에 쓴 코드입니다 (나는 그것을에게 NSString 카테고리 만든) :

+ (NSString *) stringFromStandardInDelimitedByCharactersInSet:(NSCharacterSet *)delimiters { 
NSMutableString * string = [NSMutableString string]; 
unichar input = '\0'; 
while (input = getchar()) { 
    if ([delimiters characterIsMember:input]) { break; } 
    [string appendFormat:@"%C", input]; 
} 
return string; 
} 

을 그리고 나서 getchar가가()는 일반 문자를 반환하기 때문에,

NSString * input = [NSString stringFromStandardInDelimitedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

은 (A unichar에를 사용에도 불구하고) 매우 잘 유니 코드 문자를 처리하지 않습니다 '과 같이 사용할 거라고. 그러나 기본 명령 줄 텍스트 입력의 경우 꽤 잘 작동합니다. 그러나 getchar()이 블로킹 호출이기 때문에 스레드가 실행되는 스레드가 차단된다는 경고를받습니다.

+0

objective-c가 scan과 같은 원시 문을 제공하지 않는 이유는 무엇입니까? – innuendoreplay

3
- (id)init { 
    if(!(self = [super init])){ 
     return nil; 
    } 
    void (^monitorHandler)(NSEvent *); 
    monitorHandler = ^(NSEvent *theEvent){ 
     switch ([theEvent keyCode]) { 
      case 123: // Left arrow 
       NSLog(@"Left behind."); 
       break; 
      case 124: // Right arrow 
       NSLog(@"Right as always!"); 
       break; 
      case 125: // Down arrow 
       NSLog(@"Downward is Heavenward"); 
       break; 
      case 126: // Up arrow 
       NSLog(@"Up, up, and away!"); 
       break; 
      default: 
       break; 
     } 
    }; 
    // Creates an object we do not own, but must keep track 
    // of so that it can be "removed" when we're done 
    [NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:monitorHandler]; 
    return self; 
} 
1

왜 안 되니?

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput]; 
NSData *inputData = [kbd availableData]; 
NSString *option = [[NSString alloc] initWithData:inputData encoding:NSUTF8StringEncoding]; 
관련 문제