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.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Herunterfahren/Abmelden verhindern

Beitrag von Jilocasin »

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 :mrgreen:

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
Noch eine Frage...
Wie kann ich das hIco vom ExtractIcon_() wieder freigeben?
Bild
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 »

>> Wie kann ich das hIco vom ExtractIcon_() wieder freigeben?

Code: Alles auswählen

DestroyIcon_(hIco)
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
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Aah danke
Habs schon mit CloseHandle_() und DeleteObject_() versucht, aber auf den Trichter bin ich nicht gekommen :lol:
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

Du solltest die Systemvoraussetzungen nennen, unter denen
SetProcessShutdownParameters
funktioniert.
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Nunja, ees funktioniert laut MSDN unter...
Windows Vista
Windows XP
Windows 2000 Professional
Windows NT
Windows Server "Longhorn"
Windows Server 2003
Windows 2000 Server.


Gut ok, Windows 98 bzw 95 wird leider nicht unterstützt aber um ehrlich zu sein, benutzt du sowas noch? :|

Dass Linux nicht geht und Mac ist ja schon beinahe abzulesen an den API-Befehlen
Bild
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Bringt nur leider nix wenn man eingestellt hat das Windows herunterfahren soll ohne überhaupt die #WM_QUERYENDSESSION Message an denn Programmen zu senden.

Vieleicht funktioniert da das direkte abfragen zb mit GetSystemMetrics_(2000) in einen kurzen intervall besser.
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

Zum Einen funktioniert GetSystemMetrics_(2000) nur ab XP, zum Anderen: warum sollte man sein System so einstellen, dass keine #WM_QUERYENDSESSION Message mehr gesendet wird?
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

DataMiner hat geschrieben:Zum Einen funktioniert GetSystemMetrics_(2000) nur ab XP, zum Anderen: warum sollte man sein System so einstellen, dass keine #WM_QUERYENDSESSION Message mehr gesendet wird?
Das es erst ab XP funktioniert wusste ich nicht,
woher auch, kenn ja nicht mal die Konstante für 2000.
Aber es gibt nen Herunterfahrenmodus bei denn zb einige Installationsprogramme usw. benutzen bei dem Windows Programme sofort beendet und garnicht erst die Message schickt.
Da kann das Programm dann au nicht viel machen.
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
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 »

Solche Installationsprogramme sind mir noch nicht untergekommen :mrgreen:
Wieviel klagen bekommt der Hersteller täglich? Wenn die Firma in den USA
sitzt, werden die wohl schon lange Pleite sein, da gehts ja schnell in die Höhe.
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
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Gibts nicht ne Option "schnelles Herunterfahren" oder so? Kanns nicht sein, dass es das ist?
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Antworten