Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Re-Login/Hibernate/Screensaver Ende - welches Ereignis muss man überwachen? (https://www.delphipraxis.net/196716-windows-re-login-hibernate-screensaver-ende-welches-ereignis-muss-man-ueberwachen.html)

KodeZwerg 12. Jun 2018 07:21

Windows Re-Login/Hibernate/Screensaver Ende - welches Ereignis muss man überwachen?
 
Guten Morgen,
ich versuche herauszufinden auf welches Ereignis ich warten muss bzw falls es mehrere sind welche wären das?

Ich möchte dieses Zeitpunkt erfassen:
User meldet sich ab und wieder an, sobald/nachdem Dektop erscheint, das Ereignis benötige ich.
System schläft und wird aufgeweckt, sobald/nachdem Dektop erscheint, das Ereignis benötige ich.
System ist im Screensaver und man bewegt die Maus (oder tippt was), sobald/nachdem Dektop erscheint, das Ereignis benötige ich.
(Falls ich was vergessen haben sollte, bitte Ergänzen, Danke!)

Im Grunde braucht mein Programm nur drei Zustände kennen, System arbeitet, System pausiert und System ist zurück.
Das letztere benötige ich.

Was ich erreichen will ist folgendes, was mich auch schon längere Zeit nervt, man hat mehrere Fenster offen und schön positioniert, Multi-Monitor weit, nun schläft System ein oder Screensaver oder Aus- & Einloggen, sowie Desktop wieder erscheint, sind viele Fenster nicht mehr da wo sie waren und teilweise auch mit einer völlig anderen Größe.

Was ich bereits habe ist eine ListView die mir den Status von jedem Fenster zeigt (Fenster Name, Fenster Position, Fenster Dimension, Fenster Status minimized/normal/maximized, Alpha Phase für TrayIcons ist in arbeit und das wichtigste auf welchem Monitor das Fenster plaziert ist)

Was mir fehlt ist ein Ereignis wo ich diese gesammelten Daten an die Fenster zurückgebe so das alles ausschaut wie vor der System-Pause.

Hat da jemand einen Vorschlag für mich?

HolgerX 12. Jun 2018 10:35

AW: Windows Re-Login/Hibernate/Screensaver Ende - welches Ereignis muss man überwache
 
Hmm..

Eine Möglichkeit würde Wtsapi32.dll mit RegisterSessionNotification sein.
Ob es anders Windows-Messages gibt... Weiß nicht.

Mit dieser ist es möglich Events zu bekommen u.A. für WTS_SESSION_LOCK/WTS_SESSION_UNLOCK des ScreenSavers.

Als Dienst (laufend als LocalSystem) kannst Du diese sogar benutzen, um bei WinLogon (Windows Anmeldung) in der Session des gerade angemeldeten User eine Applikation zu starten.

Denke ein ähnliches verfahren nutzen VirenScanner, um die GUI zu starten.

Dalai 12. Jun 2018 15:54

AW: Windows Re-Login/Hibernate/Screensaver Ende - welches Ereignis muss man überwache
 
Ruhezustand und Standby kann man mit diesen Messages abdecken:
Code:
PBT_APMRESUMESUSPEND = 0x0007
PBT_APMRESUMESTANDBY = 0x0008
PBT_APMSUSPEND       = 0x0004
PBT_APMSTANDBY       = 0x0005
PBT_APMRESUMECRITICAL
PBT_APMRESUMEAUTOMATIC
Alles, was RESUME enthält, ist für das Aufwachen. Der Bildschirmschoner sollte keinen Einfluss auf die Größe und Position von Fenstern haben.

Grüße
Dalai

KodeZwerg 12. Jun 2018 17:24

AW: Windows Re-Login/Hibernate/Screensaver Ende - welches Ereignis muss man überwache
 
Vielen vielen Dank für den Input, ich werde mich gleich mal ran machen und es umzusetzen, Dankeschön!

Zitat:

Der Bildschirmschoner sollte keinen Einfluss auf die Größe und Position von Fenstern haben.
Jain, wenn der doof programmiert ist und die Auflösung ändert, beim beenden auch wieder zurücksetzt, da ist es bereits passiert. Oder liegts an Windows selbst, ich weiß es nicht ich kenne leider nur das Resultat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz