Erkennung, ob der Laptopdeckel geschlossen ist / der integrierte Bildschirm ausgeschaltet ist

9

Gibt es ein Windows-API, um zu erkennen, ob ein Laptop-Deckel geschlossen ist (= integrierter Laptop-Bildschirm ist ausgeschaltet)?

Es wird bereits die "gleiche" Frage gestellt:
Aktuellen Zustand des Laptop-Deckels erhalten

Obwohl die (selbst) akzeptierte Antwort darauf beruht, dass ein integrierter Bildschirm "Gerät" entfernt wird, wenn der Deckel schließt. Aber das passiert nicht auf allen Laptops. Einige halten den Bildschirm für das System "verfügbar" (obwohl nichts tatsächlich angezeigt wird), selbst wenn der Deckel geschlossen ist. Dies bedeutet, dass sich der Windows-Desktop immer noch über den geschlossenen Bildschirm erstreckt (wenn die Einstellung "Mehrere Anzeigen" auf "Diese Anzeigen erweitern" eingestellt ist).

Ich habe noch nicht bestimmt, ob dieses Verhalten konfiguriert werden kann oder ob es treiberspezifisch ist:
Entferne den geschlossenen Laptop-Bildschirm vom Windows-Desktop

Aber selbst auf solchen Systemen weiß das Betriebssystem, dass der Deckel schließt, da es die Maschine herunterfahren / schlafen kann, wenn dies der Fall ist. Und es sendet eine Benachrichtigung ( WM_POWERBROADCAST ):
Laptop-Deckel schließen und öffnen

erkennen

Hintergrund: Ich habe eine Anwendung, die auf dem gleichen Bildschirm startet, wo sie das letzte Mal geschlossen wurde. Wenn es beim nächsten Start der Anwendung auf dem integrierten Laptop-Bildschirm geschlossen wurde und der Deckel geschlossen ist (weil der Benutzer jetzt einen externen Monitor verwendet), startet meine Anwendung auf dem jetzt unsichtbaren integrierten Laptop-Bildschirm.

Daher möchte ich erkennen, dass der Deckel geschlossen ist und die Anwendung auf einen externen Monitor zwingen.

Also ich suche entweder nach einer Möglichkeit zu erkennen, ob der Deckel geschlossen ist. Oder um zu erkennen, dass ein bestimmter Bildschirm ausgeschaltet ist (was eine sauberere Lösung wäre).

    
Martin Prikryl 17.09.2015, 13:18
quelle

1 Antwort

2

Klingt so, als ob es Ihnen egal ist, ob der Deckel geschlossen ist oder nicht und Sie möchten nur wissen, ob der Bildschirmbereich, auf dem Sie Ihre Anwendung starten möchten, verfügbar ist oder nicht.

Wenn das Betriebssystem den ausgeschalteten Bildschirm weiterhin für seinen erweiterten Desktop verwendet, bedeutet dies (aus der Sicht des Betriebssystems), dass der Bildschirm für Anwendungen verfügbar ist. Mit anderen Worten - Ihre Bewerbung wäre nicht die einzige, die unter diesem Problem leidet. Obwohl ich sagen muss, dass ich nie dieses bestimmte Verhalten aus erster Hand beobachtet habe.

Wenn Sie Ihre Anwendung während der Ausführung verschieben müssen, können Sie sich für RegisterPowerSettingNotification registrieren und darauf reagieren.

Wenn Sie jedoch starten und wissen wollen, ob der Bildschirm ein- oder ausgeschaltet ist, haben Sie zwei Möglichkeiten:

EnumDisplayDevices

Damit erhalten Sie Informationen darüber, ob Ihr Bildschirm an einen Desktop angeschlossen und aktiv ist. Dies ist "Systeminfo", die Sie von der API in User32.dll

erhalten %Vor%

DXGI (DX11)

Dies gibt Ihnen im Grunde die gleichen Informationen wie oben, aber mit einem moderneren Ansatz (und möglicherweise weniger falsch positive). Das würde natürlich erfordern, dass Sie DXGI einbinden, damit dies funktioniert, und den Header einfügen, der Ihre Anwendungsgröße erhöht:

%Vor%

Ich hoffe, das hilft.

Direct3D9

Diese Methode bietet auch Anzeigeinformationen, jedoch auf eine etwas andere Art und Weise - über eine Liste von Adaptern und Monitoren, die an diese Adapter angeschlossen sind. Denken Sie daran, in d3d9 library einzubinden, damit dies funktioniert:

%Vor%

Alle 3 Code-Snippets stammen aus einigen meiner Projekte. Sie können also einfach den Code kopieren und einfügen. Das sollte funktionieren (einige kleine Korrekturen für fehlende Funktionen oder Variablen wurden entfernt, da ich den Code im laufenden Betrieb änderte, um den Code zu reduzieren) Größe, wenn es hier gepostet wird)

    
YePhIcK 25.09.2015 03:41
quelle