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 Komisches Verhalten nach Hochfahren aus dem Standby (https://www.delphipraxis.net/133422-komisches-verhalten-nach-hochfahren-aus-dem-standby.html)

blablab 1. Mai 2009 20:27


Komisches Verhalten nach Hochfahren aus dem Standby
 
Hallo!

Gibt es eine Möglichkeit zu überprüfen ob der Benutzer eingeloggt ist oder nicht?
Das einzige was ich finden konnte ist ein Ereignis beim Hochfahren aus dem Standby oder Ruhezustand. Eigentlich ist es auch das was ich wollte. Aber das Problem ist, dass zu dem Zeitpunkt der Benutzer noch nicht eingeloggt ist und dann scheinen bestimmte dinge nicht zu funktionieren (Netzwerk). Deshalb müsste ich irgendwie bei hochfahren überprüfen ob ich angemeldet bin und den Code erst dann ausführen wenn der Benutzer sich eingeloggt hat.

Hat jemand eine Idee?

Vielen Dank!
Blablab

jaenicke 1. Mai 2009 20:34

Re: überprüfen ob eingeloggt oder nicht
 
Handelt es sich bei deinem Programm um einen Dienst? Denn normale Programme können ohnehin nur laufen, wenn der Benutzer eingeloggt ist.

Oder meinst du eingeloggt auf einem Netzwerkserver?

blablab 1. Mai 2009 20:38

Re: überprüfen ob eingeloggt oder nicht
 
Das ist n ganz normales Programm. Ich ragier auf WM_POWERBROADCAST. Ich hab da einfach mal n messagbeep reingemacht, den Pc in standby gebracht und wieder hochgefahren und dann piept das programm obwohl der Logon-Bildschirm angezeigt wird. Also anscheinend wird der Code ausgeführt obwohl ich nicht eingeloggt bin, und das möchte ich verhindern, weil zu diesem Zeitpunkt anscheinend zwar messageBeep aber nicht das Netzwerk funktioniert...

jaenicke 1. Mai 2009 20:49

Re: überprüfen ob eingeloggt oder nicht
 
Der Benutzer ist da sehr wohl eingeloggt, nur ist die Arbeitsstation zu dem Zeitpunkt gesperrt. ;-)
So macht die Frage dann auch Sinn.

Zitat MSDN:
Zitat:

There is no function you can call to determine whether the workstation is locked. To receive notification when the user logs in, use the WTSRegisterSessionNotification function to receive WM_WTSSESSION_CHANGE messages. You can use session notifications to track the desktop state so you know whether it is possible to interact with the user.
// EDIT:
WTSRegisterSessionNotification gibt es ab Windows XP.

blablab 1. Mai 2009 21:01

Re: überprüfen ob eingeloggt oder nicht
 
Mmmhhh, das ist komisch...

Ich habs jetzt so gemacht:
Delphi-Quellcode:
procedure TForm1.PowerBroadcast(var msg: TMessage);
var i: integer;
begin
   if   (msg.WParam = PBT_APMRESUMECRITICAL)
         or (msg.WParam = PBT_APMRESUMESUSPEND)
         or (msg.WParam = PBT_APMRESUMESTANDBY)
   then begin

      for i := 1 to 10 do begin
         messagebeep(0);
         sleep(1000);
      end;
      messagebeep(16);
   end;
end;
und beim hochfahren aus dem Stanby sehe ich dann den Login-Bildschirm. Während dieser angezeigt wird piept es 8 mal im Sekundentakt. Anscheinend funktionieren die ersten 3 schleifendurchläufe nicht richtig. Und wenn ich in dieser "Startphase" das Netwerk überprüf funktionierts nicht, danach aber anscheinend schon...

@jaenicke
sorry, an diesen unterschied zwischen eingeloggt und Arbeitsstation gesperrt hab ich gar nicht gedacht...
Aber das Problem ist, wenn ich auf WTSRegisterSessionNotification (anstatt auf PowerBroadcast) reagiere und jemand hat eingestellt, dass nach dem Standyby die Arbeitsstation nicht gesperrt ist, dann bekommt mein Programm es ja gar nicht mehr mit, wenn ich nach dem Standby wieder hochfahre, oder?

jaenicke 1. Mai 2009 21:05

Re: überprüfen ob eingeloggt oder nicht
 
Das eine schließt das andere doch nicht aus. Ich meine, ob der "Netzwerkzugriff", was auch immer du genau machst, fehlschlägt, merkst du ja, oder?

Interessant ist also zu erfahren, wenn du es erneut probieren könntest. Zum Beispiel bei einem Messenger, der sich wieder einwählt. Und das kannst du ja sowohl bei Power-Notifications als auch bei WM_WTSSESSION_CHANGE versuchen.

blablab 1. Mai 2009 21:26

Re: Komisches Verhalten nach Hochfahren aus dem Standby
 
Aber wenn der Benutzer eingestellt hat, dass beim hochfahren aus dem Standby die Arbeitsstation nicht gesperrt ist, dann klappts mit dem wieder einloggen nicht...

Ich mach jetzt einfach
Delphi-Quellcode:
sleep(3000);
dann gehts

Vielen Dank für deine Unterstützung jaenicke!

mkinzler 2. Mai 2009 07:16

Re: Komisches Verhalten nach Hochfahren aus dem Standby
 
Wobei Sleep() performancetechnisch suboptimal ist. Delay()Delay()


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.

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