2013-03-11 95 views
0

我正在研究Cocoa中的OpenGL遊戲,並且需要在用戶嘗試複製或粘貼時(通過命令+ c或命令+ v)捕獲。捕獲複製粘貼鍵

到目前爲止,我有一個NSView<NSTextInputClient>作爲我的NSWindow的第一響應者。它允許非ASCII字符被輸入到我的遊戲中(例如,中文維基百科),但我失敗了,試圖捕獲複製粘貼&粘貼。

我想我可能能夠使用flagsChangedkeyDown結合使用工作解決方案,但這種感覺就像是黑客攻擊,我確信有人知道更好的解決方案。 :)

編輯:爲了清楚起見,我主要看看是否存在預定義的複製事件或鍵碼​​。理由是,如果我手動定義Copy爲「Command + C」,那麼如果用戶重新映射了他/她的密鑰或正在使用某種輔助功能工具,那麼這可能會中斷。

回答

0

可以使用NSEvent類方法:+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block

也可以實現- (void)keyDown:(NSEvent *)theEvent

- (void)keyDown:(NSEvent *)theEvent { 

    if ([theEvent modifierFlags] & NSCommandKeyMask) { 
     NSString *character = [theEvent charactersIgnoringModifiers]; 
     if ([character isEqualToString:@"c"]) { 
      NSLog(@"Capture Copy&Paste Key"); 
     } 
    } 
    [super keyDown:theEvent]; 
} 
+0

有趣的發現,但它不會是,如果我使用'addLocalMonitorForEventsMatchingMask'更適合?另外,我無法找到適合的NSEventType/NSEventMaskFromType來捕獲複製或粘貼。 – 2013-03-11 06:56:43

+0

如果用戶的鍵盤沒有'c'鍵,那麼這種方式還能工作嗎? – 2013-03-11 11:11:41

+0

你可以使用keyCode.NSInteger keyCode = [theEvent keyCode]; – 2013-03-11 11:13:35