Swift: Tastendruck beim Programmstart

S

Scherak

Mitglied
Thread Starter
Dabei seit
29.09.2009
Beiträge
38
Reaktionspunkte
1
Hi,
hat jemand einen Tipp, wie ich feststellen kann, ob eine Taste (z.B. Shift/Alt) während der Programmstart festgehalten wurde?
Ich möchte darauf reagieren und einen Vorgang auslösen, habe aber leider bislang keine Möglichkeit gefunden, dies zu detektieren. Alle Routinen für Keyevents reagieren erst, wenn das Programm fertig geladen wurde.

Liebe Grüße,
scherak
 
Hallo,

NSApp > currentEvent > modifierFlags …

Viele Grüße
 
  • Gefällt mir
Reaktionen: Scherak
Ok, das sagt mir leider nur ein bisschen was. Ich mache mich auf der Suche und melde mich, wenn ich nicht weitergekommen bin.
Danke!!
 
Ich dachte, ich frage den Keyevent beim Programmstart ab:
func applicationDidFinishLaunching(aNotification: NSNotification)
if let myEvent = NSApp.currentEvent {
//myEvent.modifierFlags.rawValue abfragen und auswerten
}​
}
Leider bin hier auf dem falschen Dampfer...
 
Hi little_pixel,
der Weg ist richtig, Danke dir für deine Hilfe.
Mein Problem war folgendes: ich habe die Shift-Taste gedrückt gehalten und das Programm mit einem Doppelklick gestartet. Das löst aber kein Ereignis aus, die Taste muss kurz nach dem Start des Apps gedrückt werden. Es wird aber jetzt schwierig, das Timing dafür hinzubekommen, weil es schnell gehen muss:)
Den Status einer Taste kann man beim Programmstart wahrscheinlich nicht auswerten, oder?
(War beim Programmstart die Shift-Taste bereits gedrückt?)
 
So, lange ausprobiert und dann aufgegeben. Ich konnte mein Ziel leider nicht wie gewünscht realisieren und habe mir folgendermaßen geholfen: Der User soll innerhalb von 5 Sekunden nach dem Programmstart die Schift-Taste drücken, wenn er eine bestimmte Aktion auslösen möchte:
Code:
//Vorbereitung:
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEventsMatchingMask(.FlagsChangedMask) { (theEvent) -> NSEvent? in
        self.flagsChanged(theEvent)
        return theEvent
    }
startTime = CFAbsoluteTimeGetCurrent()
}
//dann unter NSViewController
var mytimer = 0
override func flagsChanged(theEvent: NSEvent) {
    if  theEvent.modifierFlags.contains(.ShiftKeyMask) {
        let duration = Int(CFAbsoluteTimeGetCurrent() - startTime)
        if (duration < 5 && mytimer == 0) {
            //gewünschte Aktion Ausführen
            mytimer = 1
        }
    }
}
So was kann man bestimmt auch einfacher mit einem versteckten Button erreichen, der nur innerhalb der ersten 5 Sekunden nach dem Programmstart auf eine bestimmte Tastenkombination reagiert (z.B. Command+j)
 
Zurück
Oben Unten