![]() |
Schon wieder Shutdown XP
Hallo Leute,
ich habe schon einige Artikel über Shutdown gelesen, habe aber folgendes Prob : Wenn man WindowsXP runterfährt, geht es nicht, da meine Anwendung noch läuft. Wie genau muss denn mein Code aussehen, damit Windows ordnungsgemäß runterfährt ?? |
Kennst Du den schon?
![]() Wichtig ist auch der 2. Beitrag von Daniel. ...:cat:... |
Ja,
ist doch aber nur, wenn ich Win XP aus meinem Progg heraus beenden will. Das funzt auch...aber löst leider mein Problem nicht. Oder doch... blick ich das nicht ?? |
Oops, ich habe es falsch verstanden. Was für eine Anwendung hast Du denn geschrieben, weil Delphi diese Dinge eigentlich von selbst übernimmt und es normalerweise keine Probleme geben sollte.
...:cat:... |
Meine Anwendung ist absolut harmlos, kein Registry Zugriff, FTP oder Internet, einfach simpel.Sie landet im Tray mit Hilfe der RXLIB - Trayicon - Geschichte. Liegt aber nicht daran, auch wenn Das Form sichtbar ist, weigert sich mein Progg, dass Windows beendet wird.
Habe gelesen, dass Windows uber Fenster Handle nachfragt ob runterfahren kann. Aber wie sage ich in meinem Progg : Jau, kann'ste ! |
WM_QUERYENDSESSION bekommst du von Windows geschickt, wenn es runterfahren will. Gibst du hier 0 oder FALSE zurück, dann bricht Windows das Runterfahren ab.
Aber ich habe schon von diversen TrayIcon-Komponenten gehört, dass sie das Beenden des Programms beim Runterfahren verhindern. Die aus der RXLib gehörte glaube ich dazu. Du mußt es übrigens nicht deinem Programm sagen, sondern Windows! |
Stimmt, aber wo gebe ich denn nun 0 oder false zurück ?
Nicht über canclose = true, denn dann fährt Windows runter, nur wenn die Anwendung beendet wird. |
Das hat mit dem Flag CanClose von TForm.CloseQuery nichts zu tun. Das ist eine Message, die du abfangen mußt.
Und desweiteren mußt du natürlcih TRUE oder eins zurückgeben, Windows soll ja weiter runterfahren. |
Schluchz....aber wie ????
|
So jetzt nimmst du erst mal das Taschentuch, schnäuzt dir die Nase, trocknest deine Tränen und dann kuckst du dir mal den Code vom lieben Onkel Luckie an:
Delphi-Quellcode:
Wenn du hier: msg.Result := Integer(TRUE); FALSE zurückgibst bricht Windows den Shutdown ab.
type
TForm1 = class(TForm) private { Private-Deklarationen } procedure WMQUERYEBDSESSION(var msg: TMessage); message WM_QUERYENDSESSION; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMQUERYEBDSESSION(var msg: TMessage); begin msg.Result := Integer(TRUE); end; |
Du bist ein schnuffel,
danke vorerst, muss ich heute Abend erst mal ausprobieren. So, jetzt aber schnell noch ein bisschen arbeiten. Schönes WE ...bis dann |
Zitat:
Was ist ein "schnuffel"? Aber ist schon komisch, eine Freundin hat mich immer "Schnuffi" genannt. :roll: |
Zitat:
![]() Zitat:
Grüsse, Daniel :hi: |
Re: Schon wieder Shutdown XP
oder gehst hin und erstellst eine verknüpfung mit dem pfad:
"shutdown -s -t 00 -f" und rufst dieses programm mit ![]() So fährt Windows einfach und schnell herunter. |
Re: Schon wieder Shutdown XP
Versuch mal die 2te Routine aus der Code-Library auf die schon verwiesen wurde mit den Flags "EWX_POWEROFF" und "EWX_FORCE".
Delphi-Quellcode:
Die beiden Flags fehlen auch noch in der Code-Lib... Mein Windows 2000 fährt bei "EWX_SHUTDOWN" nur bis zu der "Sie können den Computer jetzt ausschalten..."-Meldung runter.
ExitWin(EWX_POWEROFF or EWX_FORCE);
Gruß Wormid P.S.: Das EWX_FORCE soll bewirken, das Windoofs zu Not die Appliktionen mit Gewalt beendet, wenn sie nicht auf das runterfahren regieren! Nachteil: Stoppt ein Proggi den Shutdown, weil es fragt "Änderungen speichern?", dann killt Windows die App ganz eiskalt und fährt trotzdem runter! |
Re: Schon wieder Shutdown XP
Hallo Freunde :hi: ,
ich hab auch ein kleines Problemchen mit dem Code... hab folgenden Code zum herunterfahren benutzt:
Delphi-Quellcode:
bei mir (WinME) klappt das auch wunderbar, aber bei WinXP klappt es gar nicht, da das Prog dann abschmiert....
function Tform1.ExitWin(flag : word): Boolean;
var vi : TOSVersionInfo; hToken : THandle; tp : TTokenPrivileges; h : DWord; begin //result := false; vi.dwOSVersionInfoSize:=SizeOf(vi); GetVersionEx(vi); if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT begin // Achtung bei Delphi 2 muß @hToken stehen ... OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken); LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid); tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; h := 0; AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h); CloseHandle(hToken); result := ExitWindowsEx(flag,0); Application.Terminate; end else // Windows 95 begin Result := ExitWindowsEx(flag,0); Application.Terminate; end; end; woran kann das liegen? verwende ich falsche flags oder sowas? ich hab EWX_POWEROFF or EWX_FORCEIFHUNG benutzt. MfG Lefko. PS: und wieso beendet sich das prog nicht noch schnell, nachdem es den befehl zum runterfahren gegeben hat? ist irgendwie doof, geht das nicht zu machen? |
Re: Schon wieder Shutdown XP
hallo? würde mich freuen, wenn jemand eine antwort schriebe!
nein geht nicht wäre auch ok, dann weiss ich wenigstens, woran ich bin!! MfG Lefko. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 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