addGlobalMonitorForEventsMatchingMask funktioniert nicht

8

Ich habe Probleme mit einer assistive-fähigen Anwendung (XCode im Entwicklungsfall), um globale keyDown-Ereignisse zu erfassen. Ich habe viele Codebeispiele wie das Folgende gesehen, aber das funktioniert nicht für mich am 10.9.4.

%Vor%

Die empfangene Ausgabe ist:

%Vor%

Hier wird keine weitere Protokollierung durchgeführt, unabhängig davon, welche Tasten gedrückt werden oder welche Anwendung den Fokus hat, wenn ich sie treffe.

FWIW, ich versuche, eine assistive Anwendung zu schreiben, nicht einen Key-Logger oder eine andere böse Sache. Ich habe mir die anderen Instanzen dieser Frage angeschaut, aber sie scheinen entweder mit 1) zu arbeiten, dass die Anwendung nicht unterstützend aktiviert ist, oder 2) bestimmte "spezielle" Befehlsschlüssel nicht zu empfangen, die CGEvents benötigen würde. Ich sehe keine Schlüssel, auch keine einfachen (es wurde durch meine Eingabe dieses Beitrags ausgeführt und nichts wurde protokolliert). TIA!

    
James Waldrop 26.08.2014, 00:37
quelle

1 Antwort

10

Also, dank Ken Thomases Frage oben, konnte ich herausfinden, wie das geht. Das Schlüsseldetail ist, dass ich eine Befehlszeilenanwendungsvorlage verwende (ich brauche keine Benutzeroberfläche, also habe ich versucht, die Dinge minimal zu halten). Nachrichten für mich, aber im Nachhinein offensichtlich, erstellen nur eine Laufschleife keine Ereignisschleife. Um die Erstellung einer Ereignisschleife innerhalb einer Befehlszeilenanwendung zu replizieren, müssen mehr Eingeweide einer typischen Kakaoanwendung ins Spiel gebracht werden. Zuerst müssen Sie eine Klasse implementieren, die das NSApplicationDelegate-Protokoll implementiert, und dieser Delegat wird sich dort befinden, wo der Anwendungscode lebt, wobei die Hauptmethode einfach so bleibt:

%Vor%

Dies ist eine nib-lose, menübalose Anwendung, genau wie die übliche Befehlszeilen-Anwendungsvorlage, aber aufgrund des [NSApp run] -Aufrufs hat sie eine echte Ereignisschleife. Dann wurde der Anwendungscode, den ich oben in meiner Hauptmethode verwendet hatte, in den App-Delegaten verschoben:

%Vor%

Und nur aus Gründen der Vollständigkeit und der zukünftigen Leser sieht die Header-Datei so aus:

%Vor%     
James Waldrop 26.08.2014, 18:07
quelle

Tags und Links