Aus der ganzen API-Dokumentation, die ich finden kann, scheint es, als ob das "vorderste" Fenster von System Events oder der Accessibility API überprüft wird (Beispiel in Python hier, aber das ist das gleiche) in ObjC oder schnellen oder Rubin oder was auch immer):Wie kann ich das Fenster mit dem aktiven Tastaturfokus mithilfe von ScriptingBridge (oder AppleScript) ermitteln?
#!/usr/bin/env python
from ScriptingBridge import SBApplication
events = SBApplication.applicationWithBundleIdentifier_(
"com.apple.systemevents")
for proc in events.applicationProcesses():
if proc.frontmost():
print(proc.name())
der Wert I aus diesem wieder ist die gleiche wie von NSWorkspace.sharedWorkspace().frontmostApplication()
. Und es ist normalerweise korrekt. Außer wenn ein Eingabeaufforderungsdialog, insbesondere einer aus dem System, tatsächlich ist, was hat der Tastaturfokus. Zum Beispiel, wenn Messages.app ein Passwort für mein Jabber-Konto haben möchte oder wenn sich mein iCloud-Passwort ändert; Diese Dialoge scheinen aus dem Prozess UserNotificationCenter
zu stammen, der sich selbst nicht als vorderste Anwendung meldet, obwohl er definitiv einen Tastaturfokus hat.
Dialogfenster für Benutzername und Passwort gehören zu fragen, um den Prozess 'SecurityAgent' – vadian
Winfo.app - von http://www.irradiatedsoftware.com/labs/ - sagt mir, dass der Dialog, den ich betrachtete, von 'UserNotificationCenter' stammte. – Glyph