Ausgabe
Ist es möglich, den Tastaturstatus in Objective-C abzurufen, ohne auf zu verweisen NSEvent
?
Im Allgemeinen kann ich keine NSResponder
Methoden wie verwenden, -[NSResponder flagsChanged:]
aber ich muss wissen, ob die Befehlstaste derzeit gedrückt ist.
Lösung
Ich frage mich immer noch, warum Sie nicht verwenden können NSEvent
, aber ich werde die Frage trotzdem beantworten. Vielleicht bauen Sie ein “Kommandozeilen-Tool” und sind nur gegen Foundation verlinkt? Sie müssen mindestens ein weiteres Framework einbeziehen. Wenn Sie gegen AppKit verlinken möchten, können Sie (wie ich in den Kommentaren erwähnt habe) +[NSEvent modifierFlags]
; Dies ist eine Klassenmethode auf NSEvent
, sodass Sie sie überall verwenden können, ohne Zugriff auf ein einzelnes Ereignis zu benötigen, um den aktuellen Status der Zusatztasten als Bitmaske abzurufen. Die Dokumentation erklärt die Bedeutung der Bitmaske .
if( NSCommandKeyMask & [NSEvent modifierFlags] ){
NSLog(@"Oh, yeah!");
}
Sie können diese Informationen auch über Quartz Event Services abrufen . In diesem Fall müssen Sie das ApplicationServices-Framework* einbinden. Die CGEventSource-Funktionen geben Ihnen die gleiche Bitmaske , die Sie erhalten von NSEvent
:
CGEventFlags theFlags;
theFlags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState);
if( kCGEventFlagMaskCommand & theFlags ){
NSLog(@"Uh huh!");
}
*Dies ist bereits enthalten, wenn Sie tatsächlich eine Cocoa-App schreiben – es ist Teil von Quartz.
Beantwortet von – jscs
Antwort geprüft von – Robin (FixError Admin)