Seite 1 von 1

Bei Windows-Start und Windows-Shutdown Befehle ausführen???

Verfasst: 22.09.2006 09:33
von PMTheQuick
Hi,

folgende Frage:
Ist es möglich, folgendes zu machen:

Windows bootet... Windows gestartet... Und dann den PB-Code ausführen!
Windows shutdown knopf angeklickt.... Bevor beenden... PB-CODE ausführen... Dann shutdown...

Ist das möglich? Es ist nämlich ein Registry-Wert der sofort wirkt, und das Register Sicherheit anzeigt, da dem System vorgegaukelt wird, es ist im abgesicherten Modus... Nur, das blöde an diesem Registry-Tweak ist, beim nächsten Neustart startet er abgesichert... Darum will ich jetzt so ein Proggi haben.... Wie man die Registry moddet ist mirr klar, aber der Rest nicht...

Gruss
PMTheQuick ;)

(Ich mache es dann nämlich so, das beim starten der registry-wert angelegt wird, und vor dem beenden gelöscht!)

Verfasst: 22.09.2006 11:35
von #NULL
<anfängerphantasie:>
zum herunterfahren könntest du ja das prog selbst bedienen, also erst die änderungen vornehmen, und dann die windows shutdown.exe starten.

Verfasst: 22.09.2006 12:20
von bobobo
oder Grupenrichtlinienedtor benutzen
http://www.windowspage.de/frame.php?htt ... pedit.html

unter
---Windows-Einstellungen
---------Skripts (Start/Herunterfahren)

Verfasst: 22.09.2006 12:35
von ts-soft
Einfach eine Verknüpfung in den Autostart-Ordner, dann startet das
Programm mit Windows. Im Callback #WM_QUERYENDSESSION abfangen,
dann kann man noch schnell was machen, bevor Windows zuende ist (aber
sehr schnell)
Sollte IMHO der einfachste und sauberste Weg sein, wenns denn ausreicht :wink:

Verfasst: 22.09.2006 17:18
von PMTheQuick
Hmmm... Das Callback ist wohl die beste, da es auchfür andere PC's sein soll, und ohne grossen Aufwan laufen soll! ZU Autostart Ordner weiss ich... ZU dem Callback..-. Hat jemand ein Beispiel auf Lager? :D

Gruss
PMTheQuick ;)

Verfasst: 22.09.2006 17:42
von ts-soft
Ist doch simple :wink:

Code: Alles auswählen

Procedure CallBack(hWnd.l, Msg.l, wParam.l, lParam.l)
  If Msg = #WM_QUERYENDSESSION
    ; Mach was und beeil Dich ;)
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, #PB_Ignore, 0, 200, 200, "")
  SetWindowCallback(@CallBack())
  
  ; weiterer Code
EndIf
// Nachtrag:
Hab den Code mal ein bißchen erweitert. Ob man jetzt auf den Button
klickt um Windows zu beenden, oder Start/Computer ausschalten, ist
egal, die MessageBox sollte erscheinen.

PS: es empfiehlt sich den Source zu speichern, bevor man beendet :wink:

Code: Alles auswählen

Procedure EnableShutDown()
  Privileges.TOKEN_PRIVILEGES
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
  Privileges\PrivilegeCount           = 1
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
  CloseHandle_(hToken)
EndProcedure

Procedure Shutdown(Flags.l)
  EnableShutDown()
  ExitWindowsEx_(Flags, 0)
EndProcedure

Procedure Callback(hWnd.l, Msg.l, wParam.l, lParam.l)
  
  Select Msg
    Case #WM_QUERYENDSESSION
      MessageRequester("", "Achtung, Windows wird beendet")
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, #PB_Ignore, 0, 130, 50, "")
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 10, 100, 25, "Shutdown")
  EndIf
EndIf

SetWindowCallback(@Callback())

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0
        Shutdown(#EWX_SHUTDOWN | #EWX_FORCE)
      EndIf
  EndSelect
ForEver