PC herunterfahren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

PC herunterfahren

Beitrag von Thomas »

Hallo,
weiß jemand einen Befehl, mit dem man den PC runterfahren kann? :|
v6.00
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

Procedure ExitWindows(Flags.l) 
   Protected tkp.TOKEN_PRIVILEGES 
   Protected tkpNewButIgnored.TOKEN_PRIVILEGES
       
   OpenProcessToken_(GetCurrentProcess_(),#TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY,@hdlTokenHandle) 

   ; Get the LUID for shutdown privilege. 
   LookupPrivilegeValue_(0,"SeShutdownPrivilege",tkp\Privileges\Luid) 

   tkp\PrivilegeCount = 1    ; One privilege to set 
   tkp\Privileges\Attributes = #SE_PRIVILEGE_ENABLED   
    
   ; Enable the shutdown privilege in the access token of this process. 
   AdjustTokenPrivileges_(hdlTokenHandle,0,tkp,0,0,0) 
   
   ExitWindowsEx_(Flags,0)
EndProcedure 

ExitWindows(#EWX_SHUTDOWN)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Fluid Byte
Warum so schwer?
Einfacher mit diesem Befehl:

Code: Alles auswählen

RunProgram("C:\Windows\System32\shutdown.exe","-s -t 0 -f","",0)
Für PB 3.30:

Code: Alles auswählen

RunProgram("C:\Windows\System32\shutdown.exe","-s -t 0 -f",0)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

RSBasic hat geschrieben:@Fluid Byte
Warum so schwer?
Einfacher mit diesem Befehl:

Code: Alles auswählen

RunProgram("C:\Windows\System32\shutdown.exe","-s -t 0 -f","",0)
Für PB 3.30:

Code: Alles auswählen

RunProgram("C:\Windows\System32\shutdown.exe","-s -t 0 -f",0)
Dies ist nur bei WinXP oder anderen NT-Versionen vorhanden. Win98 geht da nicht mit. Da funzt das mit der rundll.
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 »

Die Version von Fluid Byte ist die einzige, die auf jedem Windows-System
funktioniert. Bei allen anderen muß man vorher die Windows-Version
auswerten usw. Ist also nicht umständlich, sondern die sinnvollste Variante.
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
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

Eine Suche mit den Begriffen wie Shutdown; Shutdown.exe; Herunterfahren (o.Ä) hätte dir sehr schnell weitergeholfen.

Habe ich neulich auch kurz gebraucht, hatte das von Fluid im Nu gefunden.
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Leonhard & @ts-soft
Achso, habe nicht gewusst.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Also bei Windows 98 geht dass so:

Code: Alles auswählen

ExitWindowsEx_((#EWX_LOGOFF), 0)
Und bei zb. Win. XP musst du dass vorher aufrufen:

Code: Alles auswählen

Procedure Privilegien()
#EWX_LOGOFF = 0 
#EWX_SHUTDOWN = 1 
#EWX_REBOOT = 2 
#EWX_FORCE = 4 
#EWX_POWEROFF = 8 
#TOKEN_ADJUST_PRIVILEGES = 32    
#TOKEN_QUERY = 8                
#SE_PRIVILEGE_ENABLED = 2      
#ANYSIZE_ARRAY = 1 
#VER_PLATFORM_WIN32_NT = 2 
#SE_SHUTDOWN_NAME = "SeShutdownPrivilege" 

Structure MyLUID 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Structure MyTOKEN 
PrivilegeCount.l 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Global hdlProcessHandle.l 
Global hdlTokenHandle.l 
Global tmpLuid.MyLUID 
Global tkp.MyToken 
Global tkpNewButIgnored.MyToken 
Global lBufferNeeded.l 

hdlProcessHandle = GetCurrentProcess_() 

OpenProcessToken_(hdlProcessHandle, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle) 

; Get the LUID for shutdown privilege 
SysName.s = "" + Chr(0) 
Name.s = "SeShutdownPrivilege" + Chr(0) 
Erg.l = LookupPrivilegeValue_(SysName, Name, @tmpLuid) 

tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED 
tkp\PrivilegeCount = 1 
tkp\LowPart = tmpLuid\LowPart 
tkp\HighPart = tmpLuid\HighPart 
tkp\Attributes = tmpLuid\Attributes 

; Enable the shutdown privilege in the access token of this process 
Erg.l = AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lblBufferNeeded) 
EndProcedure 

Und dann kannst du in ExitWindows_Ex_() dass unten alles einsetzen:

Code: Alles auswählen

#EWX_LOGOFF = 0 
#EWX_SHUTDOWN = 1 
#EWX_REBOOT = 2 
#EWX_FORCE = 4 
#EWX_POWEROFF = 8
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

ok, danke! :D
ich hoffe das reicht für's erste.
v6.00
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 »

@Joel
Ist dasselbe wie von FluidByte, sowie von mir schon mehrfach gepostet. Nur
umständlicher, da in PB bereits vordefinierte Strukturen nochmals unter
anderem Namen definiert werden. Also einfach nur veralteter Code nach PB4
übersetzt :mrgreen:

Die Rechte zum herunterfahren, die unter NT Systemen notwendig sind, kann
man auch unter Win9x anfordern, auch wenn nicht gebraucht, so brauch man
keine 2 Sourcen :wink:

PS: die globalen Variablen machen auch keinen Sinn
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