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

Für allgemeine Fragen zur Programmierung mit PureBasic.
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

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

Beitrag 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!)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

oder Grupenrichtlinienedtor benutzen
http://www.windowspage.de/frame.php?htt ... pedit.html

unter
---Windows-Einstellungen
---------Skripts (Start/Herunterfahren)
Zuletzt geändert von bobobo am 22.09.2006 14:17, insgesamt 1-mal geändert.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
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 »

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:
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
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag 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 ;)
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 »

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
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
Antworten