2012-03-25 5 views
0

Ich habe seit Tagen die Vergangenheit gesucht, um herauszufinden, wie und wenn es möglich wäre, Keydown-Ereignisse im Hintergrund zu hören. Zum Beispiel, wenn Sie das Programm "Ventrilo" oder "Teamspeak" verwenden, können Sie mit Ihrem Videospielteam sprechen, während Sie ein Videospiel spielen. Daher hören diese beiden Programme auf den Schlüssel, wenn sie im Hintergrund sind. Meine Frage ist, wie wird das gemacht? Einige Beispiele, Tutorials wären toll! Ich bin auch noch ein bisschen neu, also bitte beschreibend.Xcode Mac-Anwendung: Keydown-Ereignisse im Hintergrund wie Ventrilo

Antwort

2

Die einzige Möglichkeit, die ich in Kakao kenne, ist die Verwendung eines globalen Ereignismonitors. Wenn Sie die unten stehende Methode aufrufen, wird die App auf eine Kontrolle-alt-/warten und dann eine Warnung ausgeben. Ein mögliches Problem bei diesem Ansatz besteht darin, dass der Block bei jedem Drücken einer Taste ausgeführt wird (aber nicht die Warnung anzeigt). Wenn Sie etwas sehr prozessorintensiv machen, könnte dies die Geschwindigkeit etwas verlangsamen. Ich denke, es gibt einen Weg, dies in Carbon zu tun, der dieses Problem nicht hat, aber ich weiß nicht genug über Carbon, um darüber zu schreiben.

+(void)listenForKey { 
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) 
{ 
    NSUInteger key = 44; // 44 is forward slash 
    NSUInteger modifier = NSControlKeyMask | NSAlternateKeyMask; 
    if ([event keyCode] == key && [NSEvent modifierFlags] == modifier) 
     NSRunCriticalAlertPanel(nil,@"Control-alt/was detected",nil,nil,nil); 
    }]; 
} 
+0

Das funktioniert wunderbar! Nur eine Frage: Ist es möglich, das Control-Alt am Anfang nicht zu machen? Wo bekommen Sie auch die Schlüsselnummern? –

+0

nvm alles, was ich tun musste, war die NSevent modifierFlags == Modifier raus! Aber wo hast du Schlüsselzahlen? –

+0

Sie können diese Zeile direkt über der Zeile k = 44 hinzufügen und einige Schlüssel in einem anderen Programm eingeben, und die Schlüsselcodes werden protokolliert: NSLog (@ "% d", event.keyCode); – rdelmar