Autor Beitrag
Hybrid
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112

Win XP Pro
D7 Ent
BeitragVerfasst: Mo 15.12.03 20:15 
Ich hab da ein Problem mit einem meiner Programme, ein Kollege hat das Programm unter XP Prof. angehabt als er sich abmelden wollte, auf einmal kamen da mehrere Fehlermeldungen die von dem Delphi Prog ausgelöst wurden.
Des weiteren hat das Programm beim Reaktivieren aus dem Standby einen Bluescreen verursacht welcher einen Systemneustart zufolge hatte.

Meine Frage:
Kann man irgendwie feststellen ob sich der Benutzer abmeldet oder in den Standby geht, um einen close Befehl auszuführen?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 15.12.03 21:09 
Also, wenn sich ein Benutzer abmeldet schickt dir Windows ein WM_QUERYENDSESSION um zu fragen, ob runtergefahren werden darf, gebne hier alle laufenden Programme ihr OK, kommt noch mal ein WM_ENDSESSION.
Aber normalerweise sollte Windows dein Programm beim Beenden einer Sitzung normal beenden können. Geht das nicht, hast du einen Fehler im Programm.
Hybrid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112

Win XP Pro
D7 Ent
BeitragVerfasst: Mo 15.12.03 21:43 
Also, ich habe das Programm unter Win2k geschrieben, das Merkwürdige ist dass es bei allen Systemen funktioniert, sogar bei XP Home, nur bei XP Prof geht's nicht. Es kann natürlich sein dass es an seinem PC liegt, allerdings kann ich das bei keinem Anderen PC mit XP Pro testen, da nach dem Neustart (Wegen dem Bluescreen) die Kernel32.dll (oder eine ähnliche wichtige Systemdatei) weg war und er das System neuinstallieren musste.
broesis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19



BeitragVerfasst: Di 16.12.03 17:15 
Hi!

Eigentlich sollte es bei Win Xp nur noch Blue Screens bei Treiber-Problemen geben. Ich nehme daher an, dass das Programm nicht schuld daran war. Aber bei Windows kann man sich ja nicht immer so sicher sein...

Tschau
Broesis

_________________
"Wer andern eine Grube graebt ist Bauarbeiter"
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 16.12.03 18:01 
Die Kernel32.dll war weg? :shock:
Hybrid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112

Win XP Pro
D7 Ent
BeitragVerfasst: Di 16.12.03 18:51 
1. Bei dem Bluescreen stand auf jedenfall das das an dem Programm liegt.

2. Ja, oder irgendwas mit 'Kern', auf jeden fall eine Systemdatei wodurch man mit der Setup CD das System nicht mehr erkennen konnte. (um in die Wiederhst. Konsole zu kommen).

3. Was muss mein Programm den in die Variable WM_QUERYENDSESSION reinschreiben um das Abmelden zu erlauben?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 16.12.03 19:27 
Hybrid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112

Win XP Pro
D7 Ent
BeitragVerfasst: Di 16.12.03 20:00 
Wenn ich jetzt das hier schreibe, habe ich dennoch das Problem dass das Abmelden unterbrochen wird.
Hab ich da was falsch gemacht?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private
    Procedure WMQueryEndSession (Var Message: tMessage); message WM_QUERYENDSESSION;

...

procedure TForm1.WMQUERYENDSESSION (var Message: Tmessage );
begin
 form1.Close;
end;


Das sieht jetzt zwar ziemlich nutzlos aus da oben, da das Programm eigentlich von selbst beendet werden müsste, aber ich wollte das lieber mit dem Script machen, da ja sonst der Bluescreen kommt.

Wird das wmqueryendsession eigentlich auch für den Wechsel in den Standbymodus benutzt?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 16.12.03 23:14 
PSDK hat folgendes geschrieben:

WM_QUERYENDSESSION

The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls the ExitWindows function. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.

After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.

A window receives this message through its WindowProc function.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
LRESULT CALLBACK WindowProc(
  HWND hwnd,          // handle to window
  WM_QUERYENDSESSION, // the message to send
  WPARAM wParam,      // not used
  LPARAM lParam       // logoff option
);

Parameters
wParam: This parameter is reserved for future use.
lParam: If this parameter includes ENDSESSION_LOGOFF, the user is logging off. (Note that this parameter is a bit mask. To test for this value, use a bit-wise operation; do not test for equality.)
If this parameter is zero, the system is shutting down.

Return Values
If an application can terminate conveniently, it should return TRUE; otherwise, it should return FALSE.