[FIXED] So erhalten Sie den Tastaturstatus in Objective-C, ohne auf NSEvent zu verweisen

Ausgabe

Ist es möglich, den Tastaturstatus in Objective-C abzurufen, ohne auf zu verweisen NSEvent?

Im Allgemeinen kann ich keine NSResponderMethoden 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like