Shutdown
Shutdown
Weiss jemand, wie ich innerhalb meines Programms abfragen kann, ob der Rechner gerade heruntergefahren wird?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Shutdown
In deinem Programm einen Callback einrichten und die Messages
auf #WM_QUERYENDSESSION überprüfen. Diese Message wird
von Windows an alle Programme gesendet, bevor der Rechner
runter gefahren wird.
Wenn Du mit Return = #NULL reagierst (statt #PB_ProcessPureBasicEvents)
wartet Windows, bis Dein Programm beendet ist.
auf #WM_QUERYENDSESSION überprüfen. Diese Message wird
von Windows an alle Programme gesendet, bevor der Rechner
runter gefahren wird.
Wenn Du mit Return = #NULL reagierst (statt #PB_ProcessPureBasicEvents)
wartet Windows, bis Dein Programm beendet ist.
"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Shutdown
Danke dige! Habe aber mit Callbacks noch nie was gemacht. Kannst du mir mal ein Codebeispiel geben?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Shutdown
Ich heiße zwar nicht dige, aber
bitteschön 
Code: Alles auswählen
Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
Protected Result = #PB_ProcessPureBasicEvents
If uMsg = #WM_QUERYENDSESSION
; Hier der Programmcode der ausgeführt werden soll
Debug "Windows wird heruntergefahren !"
EndIf
ProcedureReturn Result
EndProcedure
OpenWindow(0,200,300,800,600,"TestWindow")
SetWindowCallback(@WindowCallback())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Shutdown
So wie Bisonte es macht und möglichst nicht mit ProcedureReturn 0 arbeiten, sondern den Code so minimieren das
er es schafft alles zu erledigen.
Das aufhalten von Windows ist nicht so einfach und mit ProcedureReturn 0 wird es mit Vista/7 usw. eher nicht klappen.
Da sind dann noch ein paar weitere API Aufrufe fällig. genauso wie auf Server-Systemen, aber die werden ja nur selten
heruntergefahren
er es schafft alles zu erledigen.
Das aufhalten von Windows ist nicht so einfach und mit ProcedureReturn 0 wird es mit Vista/7 usw. eher nicht klappen.
Da sind dann noch ein paar weitere API Aufrufe fällig. genauso wie auf Server-Systemen, aber die werden ja nur selten
heruntergefahren

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Shutdown
Danke euch allen für Code und Tipps! Die Lösung dieses Problems war mir sehr wichtig. 

- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Shutdown
Was denn? Wenn ich das Programm zum Shutdown Zeitpunkt nicht gleich beenden kann, weil nochts-soft hat geschrieben:So wie Bisonte es macht und möglichst nicht mit ProcedureReturn 0 arbeiten, sondern den Code so minimieren das
er es schafft alles zu erledigen.
Das aufhalten von Windows ist nicht so einfach und mit ProcedureReturn 0 wird es mit Vista/7 usw. eher nicht klappen.
Da sind dann noch ein paar weitere API Aufrufe fällig. genauso wie auf Server-Systemen, aber die werden ja nur selten
heruntergefahren
Threads laufen etc., werfe ich immer #Null zurück und lande damit in der Liste der Programme, auf die
Win7 noch warten muss...
Ist das Programm dann fertig und beendet, geht der ShutDown weiter...
Also was muss denn da noch an API Calls rein?
"Papa, ich laufe schneller - dann ist es nicht so weit."
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Shutdown
Man kann sich nicht drauf verlassen, das der Shutdown wartet. Da gibt es div. Einstellungen, wie "schnelles Herunterfahren" unter XP usw.
Thread müssen ja auch nicht sauber beendet werden, Speicherlecks sind doch unwichtig, wenn Windows beendet
Nur das notwendigste sichern ist die Divise. Wenn dafür die Zeit nicht reicht, wäre zwischendurch sichern angesagt.
Seit Vista gibt es dann noch eine weitere API, die man in solchen Fällen nutzen kann:
ShutdownBlockReasonCreate
ShutdownBlockReasonDestroy
Mit 0 zurückgeben, riskiert man, Windows gar nicht mehr beenden zu können, außer über Netzschalter.
Also, wenn es vermeidbar ist, einfach nur eine kurze Speichern-Routine nach der Message ausführen und nichts weiter.
Das klappt nach meinen Erfahrungen bisher immer gut.
Gruß
Thomas
Thread müssen ja auch nicht sauber beendet werden, Speicherlecks sind doch unwichtig, wenn Windows beendet

Nur das notwendigste sichern ist die Divise. Wenn dafür die Zeit nicht reicht, wäre zwischendurch sichern angesagt.
Seit Vista gibt es dann noch eine weitere API, die man in solchen Fällen nutzen kann:
ShutdownBlockReasonCreate
ShutdownBlockReasonDestroy
Mit 0 zurückgeben, riskiert man, Windows gar nicht mehr beenden zu können, außer über Netzschalter.
Also, wenn es vermeidbar ist, einfach nur eine kurze Speichern-Routine nach der Message ausführen und nichts weiter.
Das klappt nach meinen Erfahrungen bisher immer gut.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
