Seite 2 von 2

Verfasst: 13.05.2007 18:34
von ts-soft
bluejoke hat geschrieben:Gibts nicht ne Option "schnelles Herunterfahren" oder so? Kanns nicht sein, dass es das ist?
Diese Option sorgt dafür das #WM_QUERYENDSESSION zwar gesendet wird,
aber es wird nicht abgewartet, ob alle Programme ihr Okay gegeben haben.
Ist für reine Computerhobbyisten vielleicht interessant, aber alle anderen,
sollten die Finger davon lassen. Datenverluste, nicht ordnungsgemäß beendete
Services usw. sind die folgen.

Verhinderer verhindert nicht

Verfasst: 13.10.2014 00:48
von dlldev
Unter Windows XP läuft das Programm 1A, leider nicht unter Windows 8 (8.1). Keine Fehlermeldung, kein Logeintrag, Windows wird einfach runter gefahren bez. neu gestartet. Bin den Source nun x mal durchgegangen und weiss ehrlich gesagt nicht wo der Wurm drin ist. Ach ja, als Administrator starten habe ich auch noch versucht, brachte leider auch nichts. Hat einer von Euch eine Idee?

Re: Herunterfahren/Abmelden verhindern

Verfasst: 13.10.2014 18:13
von edel
Was mich etwas verwundert ist das "If lParam = 0". Es steht nirgends etwas von einer Wert 0.

Code: Alles auswählen


ENDSESSION_CLOSEAPP 0x00000001
The application is using a file that must be replaced, the system is being serviced, or system resources are exhausted. For more information, see Guidelines for Applications.

ENDSESSION_CRITICAL 0x40000000
The application is forced to shut down.

ENDSESSION_LOGOFF 0x80000000

Re: Herunterfahren/Abmelden verhindern

Verfasst: 25.10.2014 11:51
von dlldev
Danke für den Hinweis, anscheinend hat sich bei Windows 8 etwas an der Abmelde Prozedur bez. dessen Events verändert. Scheint nicht mehr zu gehen. :(

Re: Herunterfahren/Abmelden verhindern

Verfasst: 22.08.2016 14:38
von Rudi
Bei Shutdown kommt kein lParam bzw. Null.
Erfolgreich getestet unter Windows 7, 8.1 und 10:

Code: Alles auswählen

;                              ╔════════════════╤════════════════╗
;                              ║          ┌─────┴─────┐          ║
;                              ╟──────────┤  Example  ├──────────╢
;                              ║          └─────┬─────┘   ©Rudi☺ ║
;                              ╚════════════════╧════════════════╝

#ENDSESSION_CLOSEAPP = $00000001
#ENDSESSION_CRITICAL = $40000000
#ENDSESSION_LOGOFF   = $80000000

Procedure WinCallback(hWnd, uMsg, wParam, lParam)
	
	Select uMsg
		Case #WM_QUERYENDSESSION
			If lParam & #ENDSESSION_CLOSEAPP
				MessageRequester("QUERYENDSESSION", "CLOSEAPP lParam: "+Str(lParam))
			ElseIf lParam & #ENDSESSION_CRITICAL
				MessageRequester("QUERYENDSESSION", "CRITICAL lParam: "+Str(lParam))
			ElseIf lParam & #ENDSESSION_LOGOFF
				MessageRequester("QUERYENDSESSION", "LOGOFF lParam: "+Str(lParam))
			Else
				MessageRequester("QUERYENDSESSION", "Else lParam: "+Str(lParam))
			EndIf
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure 

If OpenWindow(0, 0, 0, 200, 100, "Messages", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
	SetWindowCallback(@WinCallback())
	
	Repeat
		Select WaitWindowEvent()
			Case #PB_Event_CloseWindow
				CloseWindow(0)
				Break
		EndSelect
	ForEver
EndIf
End
[/size]Es muss natürlich auch etwas da sein, das die Programmausführung bzw. den Shutdown anhält - wie hier der MessageRequester.