Benachrichtigung, wenn das Display verbunden oder getrennt wird

8

Ich arbeite an einer OS X-Anwendung, die benutzerdefinierte Fenster in allen verfügbaren Räumen aller angeschlossenen Displays anzeigt. Ich kann ein Array der verfügbaren Anzeigeobjekte abrufen, indem ich [NSScreen-Bildschirme] aufrufen.

Was ich momentan vermisse, ist eine Möglichkeit zu sagen, ob der Benutzer eine Anzeige mit einem Bildschirm verbindet oder einen Bildschirm von seinem System trennt.

Ich habe die Cocoa-Dokumentation nach Benachrichtigungen durchsucht, die sich ohne viel Glück mit einem solchen Szenario befassen, und ich weigere mich, zu glauben, dass es keine Systembenachrichtigung gibt, die beim Ändern der Anzahl der mit dem System verbundenen Bildschirme gepostet wird .

Irgendwelche Vorschläge zur Lösung dieses Problems?

    
Gabor 04.08.2013, 11:56
quelle

2 Antworten

8

Es gibt mehrere Möglichkeiten, das zu erreichen:
Sie könnten implementieren applicationDidChangeScreenParameters: in Ihrem App-Delegaten (die Methode ist Teil von NSApplicationDelegateProtocol ).
Eine andere Möglichkeit besteht darin, nach dem NSApplicationDidChangeScreenParametersNotification zu suchen, das vom Standard-Benachrichtigungscenter [NSNotificationCenter defaultCenter] gesendet wurde.

Immer wenn Ihre Delegiertenmethode aufgerufen wird oder Sie die Benachrichtigung erhalten, können Sie über [NSScreen screens] iterieren und sehen, ob eine Anzeige verbunden oder entfernt wurde (Sie müssen eine Anzeigeliste pflegen, die Sie beim Programmstart überprüfen können).

Ein Nicht-Cocoa-Ansatz wäre über Core Graphics Display-Dienste:
Sie müssen eine Rekonfigurationsfunktion implementieren und sie mit CGDisplayRegisterReconfigurationCallback(CGDisplayReconfigurationCallBack cb, void* obj);

In Ihrer Rekonfigurationsfunktion können Sie den Status der betroffenen Anzeige abfragen. Zum Beispiel:

%Vor%     
Thomas Zoechling 04.08.2013, 12:18
quelle
3

in swift 3.0:

%Vor%

NC-Rückruf:

%Vor%     
ingconti 17.08.2016 07:28
quelle

Tags und Links