InitiateSystemShutdown_()
-
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
InitiateSystemShutdown_()
Der 1. Parameter dieser WinApi-Funktion übergibt die maschine die heruntergefahren werden soll. Wenn ich Null übergebe dann sollte der lokale PC heruntergefahren werden. Leider funzt das aber nicht. ich bekomm immer 0 zurück.
Weis jemand woran das liegen könnte?
Weis jemand woran das liegen könnte?
- 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
das stimmtUnter NT-Systemen muss man sich erstmal die Rechte holen
hier der Code für den lokalen ComputerTo shut down the local computer, the calling thread must have the SE_SHUTDOWN_NAME privilege. To shut down a remote computer, the calling thread must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. By default, users can enable the SE_SHUTDOWN_NAME privilege on the computer they are logged onto, and administrators can enable the SE_REMOTE_SHUTDOWN_NAME privilege on remote computers
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
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
- 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
orange-blue hat geschrieben:Aber muss dass Programm die rechte haben oder der Benutzter der das programm gestartet hat?
Code: Alles auswählen
EnableShutDown()

Im PureArea.net im Showcase findest Du mein Programm "TS-Shutdown" mit Source, das kannste Dir ja mal anschauen.
gruß
Thomas
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich benutze immer den folgenden Code, wenn mein PC zu einer bestimmten Zeit herunterfahren soll.Nachteil: Zum Beenden des Programms muss man den TaskManager benutzen. 
Code: Alles auswählen
Procedure Shutdown()
#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)
Erg.l = ExitWindowsEx_((#EWX_POWEROFF | #EWX_FORCE), 0)
EndProcedure
hour.l = 22
minute.l = 00
Repeat
time.l = Date()
If Hour(time) = hour And Minute(time) = minute
Shutdown()
Break
ElseIf Hour(time) = hour And Minute(time) > minute
MessageRequester("ShutDownSystemByGivenTime", "Programm vorzeitig beendet")
Break
EndIf
Delay(1000)
ForEver

-
- Beiträge: 556
- Registriert: 04.09.2004 22:23
- Kontaktdaten:
ich will ja nicht nur runterfahren nach einer bestimmten zeit.
Ich will auch standby, ruhezustand, PC sperren, abmelden und dass alles auch über shortcuts(zb. [alt]+[s] für sperren) aber global(also auch wenn ich das programm nicht offen hab.
Es hat eben nur diese funktion nicht gefunzt, aber jetzt ist mein Programm (theoretisch) fertig
Ich will auch standby, ruhezustand, PC sperren, abmelden und dass alles auch über shortcuts(zb. [alt]+[s] für sperren) aber global(also auch wenn ich das programm nicht offen hab.
Es hat eben nur diese funktion nicht gefunzt, aber jetzt ist mein Programm (theoretisch) fertig
