AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Komisches Verhalten nach Hochfahren aus dem Standby
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches Verhalten nach Hochfahren aus dem Standby

Ein Thema von blablab · begonnen am 1. Mai 2009 · letzter Beitrag vom 2. Mai 2009
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Komisches Verhalten nach Hochfahren aus dem Standby

  Alt 1. Mai 2009, 21:27
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: überprüfen ob eingeloggt oder nicht

  Alt 1. Mai 2009, 21:34
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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: überprüfen ob eingeloggt oder nicht

  Alt 1. Mai 2009, 21:38
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...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: überprüfen ob eingeloggt oder nicht

  Alt 1. Mai 2009, 21:49
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: überprüfen ob eingeloggt oder nicht

  Alt 1. Mai 2009, 22:01
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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: überprüfen ob eingeloggt oder nicht

  Alt 1. Mai 2009, 22:05
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Komisches Verhalten nach Hochfahren aus dem Standby

  Alt 1. Mai 2009, 22:26
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 sleep(3000); dann gehts

Vielen Dank für deine Unterstützung jaenicke!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Komisches Verhalten nach Hochfahren aus dem Standby

  Alt 2. Mai 2009, 08:16
Wobei Sleep() performancetechnisch suboptimal ist. Delay()Delay()
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 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