Herunterfahren/Abmelden verhindern
Verfasst: 07.05.2007 16:56
Ja, ich weiß dazu gibt es im CodeArchiv etwas, allerdings funktioniert der Code nur halbwegs...
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
Noch eine Frage...
Wie kann ich das hIco vom ExtractIcon_() wieder freigeben?
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?