Herunterfahren/Abmelden verhindern

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
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

Beitrag 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.
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.
Bild
Benutzeravatar
dlldev
Beiträge: 23
Registriert: 28.07.2014 02:22

Verhinderer verhindert nicht

Beitrag 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?
Entwicklungsumgebung: Intel i7 Laptop mit 8GB RAM und Windows 8.1 drauf. PureBasic 5.24 LTS.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Herunterfahren/Abmelden verhindern

Beitrag 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
Benutzeravatar
dlldev
Beiträge: 23
Registriert: 28.07.2014 02:22

Re: Herunterfahren/Abmelden verhindern

Beitrag 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. :(
Entwicklungsumgebung: Intel i7 Laptop mit 8GB RAM und Windows 8.1 drauf. PureBasic 5.24 LTS.
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: Herunterfahren/Abmelden verhindern

Beitrag 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.
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Antworten