2017-03-20 1 views
1

Ich möchte Zugriff auf die Symbole, die derzeit in der Mac-Menüleiste sind, aber ich habe Probleme, die relevanten APIs und Klassen zu finden. Ich habe NSStatusBar (die die Menüleiste darstellt) angeschaut, aber es bietet keinen öffentlichen Zugriff auf welche Menüleiste Anwendungen enthält. Ich habe mir auch NSStatusItem und NSStatusBarButton angeschaut, die Elemente in der Menüleiste und ihre visuellen Darstellungen darstellen, aber alles, was ich über sie gefunden habe, geht es darum, dass man es selbst macht.Wie kann ich eine Liste der Symbole in der Mac-Menüleiste erhalten?

Wie programmiere ich programmatisch, welche Symbole in der Mac-Menüleiste angezeigt werden und welchen Anwendungen sie entsprechen?

Antwort

0

Es gibt keine öffentliche API, die diese Informationen direkt verfügbar macht.

Sie können es wahrscheinlich mit der Accessibility-API erraten, indem Sie nach Objekten suchen, die sich in der Menüleiste befinden (y = 0) und den Besitzer jedes einzelnen erhalten. Dies erfordert jedoch, dass Ihre Anwendung über Zugriffsberechtigungen verfügt, die der Benutzer explizit in den Systemeinstellungen aktivieren muss.

0

können Sie

CFArrayRef aList = CGWindowListCreate(kCGWindowListOptionOnScreenOnly|kCGWindowListExcludeDesktopElements, kCGNullWindowID); 
CFArrayRef aWindowsInfoArray = CGWindowListCreateDescriptionFromArray(aList); 

Filter die Liste nach Größe und Koordinaten verwenden. kCGWindowOwnerName enthält den Namen der Anwendung.

0

Sie die Funktionen, die in Coregraphics verwenden können:

let windowList = CGWindowListCopyWindowInfo([.optionOnScreenOnly], kCGNullWindowID) as! [[String: Any]] 

for window in windowList { 
    let boundsDict = window[kCGWindowBounds as String] as! CFDictionary 
    let applicationName = window[kCGWindowOwnerName as String] as! String 
    let windowName = window[kCGWindowName as String] as! String 

    if let bounds = CGRect(dictionaryRepresentation: boundsDict), bounds.origin.y == 0 { 
     print(applicationName, windowName, bounds) 
    } 
} 

Während des Tests fand ich, dass Statusleiste Elemente, deren Grenzen halten Sie sich an ganz oben auf dem Bildschirm sind. Nicht getestet auf Multi-Screen-Setup. Trotz allem ist alles, was Sie bekommen können, der Name der Anwendung, die die Statusleiste besitzt. Ich habe keine Möglichkeit gefunden, eine Instanz von NSStatusItem zu erstellen, die auf das Element auf der Leiste verweist.

Verwandte Themen