Das Herunterfahren wird zwar verhindert, aber alle laufenden Anwendungen werden dennoch beendet.
Ich hab mal ein wenig dran rumgetüftelt und noch ein Interface drangebaut...
Hoffe, man kanns gebrauchen
Code: Alles auswählen
LoadFont(0, "Arial", 10, #PB_Font_Bold)
OpenWindow(0, 0, 0, 300, 300, "Der Verhinderer", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
CheckBoxGadget(0, 10, 10, 280, 20, "Abmelden verhindern")
SetGadgetFont(0, FontID(0))
CheckBoxGadget(1, 10, 30, 280, 20, "Herunterfahren verhindern")
SetGadgetFont(1, FontID(0))
TextGadget(#PB_Any, 10, 60, 280, 20, "Log:")
ListIconGadget(2, 10, 80, 280, 210, "Zeitpunkt", 100)
AddGadgetColumn(2, 1, "Anfrage", 100)
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Message = #WM_QUERYENDSESSION
If lParam = 0 ; Shutdown
If GetGadgetState(1)
Result = #False
AddGadgetItem(2, -1, FormatDate("%hh:%ii:%ss", Date()) + Chr(10) + "Herunterfahren")
Else
Result = #True
EndIf
Else ; Logoff
If GetGadgetState(0)
Result = #False
AddGadgetItem(2, -1, FormatDate("%hh:%ii:%ss", Date()) + Chr(10) + "Abmelden")
Else
Result = #True
EndIf
EndIf
EndIf
If Message = #WM_ENDSESSION
Result = 0 ; Hier ist's schon zu spät xD
EndIf
ProcedureReturn Result
EndProcedure
SetProcessShutdownParameters_($4FF, 0)
SetWindowCallback(@MyWindowCallback())
hIco = ExtractIcon_(0, "Shell32.dll", 27)
Repeat
EventID = WaitWindowEvent()
If GetWindowState(0) = #PB_Window_Minimize And IsSysTrayIcon(0) = 0
HideWindow(0, 1)
AddSysTrayIcon(0, WindowID(0), hIco)
SysTrayIconToolTip(0, "Der Verhinderer")
EndIf
If EventID = #PB_Event_SysTray
SetWindowState(0, #PB_Window_Normal)
HideWindow(0, 0)
SetForegroundWindow_(WindowID(0))
RemoveSysTrayIcon(0)
EndIf
If EventID = 16
If MessageRequester("Frage", "Wollen Sie das Programm wirklich beenden?", #PB_MessageRequester_YesNo + 64) = #PB_MessageRequester_Yes
End
EndIf
EndIf
ForEver
Wie kann ich das hIco vom ExtractIcon_() wieder freigeben?