2016-04-02 15 views
4

Ich möchte in meiner App Application Switcher simulieren und ich denke, CGEvent kann das vielleicht tun.Cocoa: Simulieren Befehl + Tab in CGEvent

Nun, nachdem ich einige grundlegende Informationen über CGEvent gelernt habe, kann ich den Tastendruck Command + Tab simulieren. Aber das Application Switcher-Fenster blinkt einfach und wechselt sofort zu einer anderen App.

Ich merke, dass ich hold die Befehlstaste und drücken Sie die Tabulatortaste, um die App zu wählen. Also, hier ist mein Code:

// Hold the Command key 
let source = CGEventSourceCreate(.HIDSystemState) 
let event = CGEventCreateKeyboardEvent(source, 55 as CGKeyCode, true) 
CGEventSetIntegerValueField(event, .KeyboardEventAutorepeat, 1) 
CGEventPost(.CGHIDEventTap, event) 

// Press Tab key once 
let source = CGEventSourceCreate(.HIDSystemState) 
let keyDown = CGEventCreateKeyboardEvent(source, 48 as CGKeyCode, true) 
CGEventSetFlags(keyDown, .MaskCommand) 
CGEventPost(.CGHIDEventTap, keyDown) 
let keyUp = CGEventCreateKeyboardEvent(source, 48 as CGKeyCode, false) 
CGEventPost(.CGHIDEventTap, keyUp) 

Aber es funktioniert nicht! Irgendwelche Ideen? Vielen Dank!

+0

Wenn ich manuell den Befehl-Tab tippe, blinkt das Application Switcher-Fenster einfach und wechselt sofort zu einer anderen App. – Willeke

+0

Warum legen Sie KeyboardEventAutorepeat fest? – Willeke

+0

Sie müssen den Benutzer simulieren: Befehl runter, Tab runter, Tab hoch, Befehl hoch. – Willeke

Antwort

6

Das Befehlsflag fehlt im keyup-Ereignis. Fügen Sie CGEventSetFlags(keyUp, .MaskCommand) vor CGEventPost(.CGHIDEventTap, keyUp) hinzu.