Wenn der Benutzer in Windows 10 (oder sogar früheren Versionen die Anzeigeeinstellungen ändert), wird dem Betriebssystem eine Auswahl angeboten, ob die Änderungen beibehalten oder zurückgesetzt werden sollen. Der Benutzer erhält auch ein 15 Sekunden-Fenster. Wenn sie nichts tun, werden die Einstellungen zurückgesetzt. Wenn sie "Änderungen beibehalten" oder "Wiederherstellen" auswählen, wird die entsprechende Aktion ausgeführt. Ich möchte vom Betriebssystem benachrichtigt werden, wenn dieses Dialogfeld angezeigt wird.
Ich habe alle Prozesse im Task-Manager überwacht und es wurde kein neuer Prozess generiert. Also kann ich den Prozess nicht einmal verfolgen. Was ist ein möglicher Weg, dies zu tun? Ich kenne eine Möglichkeit zu implementieren, hören WM_DISPLAYCHANGE Ereignis. Aber das ist keine zuverlässige Methode wegen des 15-Sekunden-Fensters, das dem Benutzer gegeben wird. Grundsätzlich möchte ich benachrichtigt werden, wenn das Dialogfeld erscheint und verschwindet. Irgendwelche Ideen, wie ich das umsetzen kann?
Ich muss dies übrigens für Windows 10 implementieren. Windows 10-Informationen sind daher am hilfreichsten. Danke!
WM_DISPLAYCHANGE ist der richtige Weg. Es wird gesendet, wenn sich die Auflösung wirklich ändert. Das heißt, kurz bevor der Dialog erscheint und wenn Sie auf "Zurück" klicken. Es wird nicht gesendet, wenn Sie die Auflösung beibehalten.
Das 15-Sekunden-Fenster mit den Keep- und Revert-Tasten ist ein # 32770-Dialog. Wenn Sie den OS-Dialog verwenden, ist der Startprozess explorer.exe. Es zeigt sich auf meinem Spyxx - siehe unten. Klicken Sie einfach auf die Schaltfläche Windows
, wenn das Dialogfeld angezeigt wird, und suchen Sie danach.
Sie können die Auflösung ohne das Dialogfeld ändern. Grafikkarten haben normalerweise ihre eigene Software mit oder ohne einen anderen Dialog. Jede Software kann die Auflösung mithilfe von ChangeDisplaySettings ändern.
Sie können wahrscheinlich den OS-Dialog aufspüren, aber das wäre sehr fragil, also würde ich es nicht empfehlen.
Wenn Sie wirklich den Systemdialog sehen müssen, können Sie alle Top-Level-Fenster auflisten, wenn Sie WM_DISPLAYCHANGE erhalten.
Ich schätze, du müsstest mindestens eine Sekunde lang ununterbrochen aufzählen und nach dem Muster der untergeordneten Fenster, Beschriftungen, Klassen, Fensterposition (Mitte des primären Bildschirms) suchen. Das müssten Sie pro Betriebssystemversion und pro Sprache machen.
Sie können Fenster auch regelmäßig auflisten, bevor Sie WM_DISPLAYCHANGE empfangen, und nach Änderungen der Auflösung nach Änderungen in den Fenstern der obersten Ebene suchen.
BEARBEITEN:
Wie gewünscht, hier ist ein Code, um den Dialog zu sehen:
Und hier ist es ausgegeben:
%Vor% Eine weitere zu beachtende Sache: Wenn die Bildschirmauflösung UAC in win10 oder zukünftigen Betriebssystemen auslöst, können Sie den Dialog nicht erkennen. Sie werden immer noch über die Änderung der Auflösung informiert.
Der UAC-Dialog ist nicht erkennbar, da er auf einem Desktop ausgeführt wird, auf den nur das Systemkonto zugreifen kann.
Versuchen Sie, dieses Fenster mit FindWindowEx zu finden, mit einem untergeordneten Fenster oder einem Hauptfenster mit diesem bestimmten Text ...
Tags und Links c++ windows winapi windows-10 hook