Ausschalten / Herunterfahren ohne Nachfragen (VB6)

Hallo,
Würde gerne wissen, wie man den PC
unter (Win.98, 2000 und XP)
per cmdEnde - Klick
ohne Nachfrage des Rechners herunterfährt :smile:

Danke im vorraus
Udo
PS: Also ich meine den VB6 Code, und net wie ich auf Start … klicke :wink:

Hallo,

ich habe Dir mal den Beispielcode aus der API-Guide kopiert.

' Shutdown Flags
Const EWX\_LOGOFF = 0
Const EWX\_SHUTDOWN = 1
Const EWX\_REBOOT = 2
Const EWX\_FORCE = 4
Const SE\_PRIVILEGE\_ENABLED = &H2
Const TokenPrivileges = 3
Const TOKEN\_ASSIGN\_PRIMARY = &H1
Const TOKEN\_DUPLICATE = &H2
Const TOKEN\_IMPERSONATE = &H4
Const TOKEN\_QUERY = &H8
Const TOKEN\_QUERY\_SOURCE = &H10
Const TOKEN\_ADJUST\_PRIVILEGES = &H20
Const TOKEN\_ADJUST\_GROUPS = &H40
Const TOKEN\_ADJUST\_DEFAULT = &H80
Const SE\_SHUTDOWN\_NAME = "SeShutdownPrivilege"
Const ANYSIZE\_ARRAY = 1
Private Type LARGE\_INTEGER
 lowpart As Long
 highpart As Long
End Type
Private Type Luid
 lowpart As Long
 highpart As Long
End Type
Private Type LUID\_AND\_ATTRIBUTES
 'pLuid As Luid
 pLuid As LARGE\_INTEGER
 Attributes As Long
End Type
Private Type TOKEN\_PRIVILEGES
 PrivilegeCount As Long
 Privileges(ANYSIZE\_ARRAY) As LUID\_AND\_ATTRIBUTES
End Type
Private Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE\_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN\_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN\_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function InitiateShutdownMachine(ByVal Machine As String, Optional Force As Variant, Optional Restart As Variant, Optional AllowLocalShutdown As Variant, Optional Delay As Variant, Optional Message As Variant) As Boolean
 Dim hProc As Long
 Dim OldTokenStuff As TOKEN\_PRIVILEGES
 Dim OldTokenStuffLen As Long
 Dim NewTokenStuff As TOKEN\_PRIVILEGES
 Dim NewTokenStuffLen As Long
 Dim pSize As Long
 If IsMissing(Force) Then Force = False
 If IsMissing(Restart) Then Restart = True
 If IsMissing(AllowLocalShutdown) Then AllowLocalShutdown = False
 If IsMissing(Delay) Then Delay = 0
 If IsMissing(Message) Then Message = ""
 'Make sure the Machine-name doesn't start with '\\'
 If InStr(Machine, "\\") = 1 Then
 Machine = Right(Machine, Len(Machine) - 2)
 End If
 'check if it's the local machine that's going to be shutdown
 If (LCase(GetMyMachineName) = LCase(Machine)) Then
 'may we shut this computer down?
 If AllowLocalShutdown = False Then Exit Function
 'open access token
 If OpenProcessToken(GetCurrentProcess(), TOKEN\_ADJUST\_PRIVILEGES Or TOKEN\_QUERY, hProc) = 0 Then
 MsgBox "OpenProcessToken Error: " & GetLastError()
 Exit Function
 End If
 'retrieve the locally unique identifier to represent the Shutdown-privilege name
 If LookupPrivilegeValue(vbNullString, SE\_SHUTDOWN\_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 Then
 MsgBox "LookupPrivilegeValue Error: " & GetLastError()
 Exit Function
 End If
 NewTokenStuff = OldTokenStuff
 NewTokenStuff.PrivilegeCount = 1
 NewTokenStuff.Privileges(0).Attributes = SE\_PRIVILEGE\_ENABLED
 NewTokenStuffLen = Len(NewTokenStuff)
 pSize = Len(NewTokenStuff)
 'Enable shutdown-privilege
 If AdjustTokenPrivileges(hProc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 Then
 MsgBox "AdjustTokenPrivileges Error: " & GetLastError()
 Exit Function
 End If
 'initiate the system shutdown
 If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
 Exit Function
 End If
 NewTokenStuff.Privileges(0).Attributes = 0
 'Disable shutdown-privilege
 If AdjustTokenPrivileges(hProc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 Then
 Exit Function
 End If
 Else
 'initiate the system shutdown
 If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
 Exit Function
 End If
 End If
 InitiateShutdownMachine = True
End Function
Function GetMyMachineName() As String
 Dim sLen As Long
 'create a buffer
 GetMyMachineName = Space(100)
 sLen = 100
 'retrieve the computer name
 If GetComputerName(GetMyMachineName, sLen) Then
 GetMyMachineName = Left(GetMyMachineName, sLen)
 End If
End Function
Private Sub Form\_Load()
 'KPD-Team 2000
 'URL: http://www.allapi.net/
 'E-Mail: [email protected]
 InitiateShutdownMachine GetMyMachineName, True, True, True, 60, "You initiated a system shutdown..."
End Sub

… oder so

Public Function FktShutdown(intQuit As Integer)

’ 4 = logoff
’ 5 = shutdown
’ 6 = reboot
’ 12 = power off

Dim oSys, oSysSet
Set oSysSet = GetObject(„winmgmts:{(Shutdown)}//./root/cimv2“).ExecQuery(„select * from Win32_OperatingSystem where Primary=true“)
For Each oSys In oSysSet
oSys.Win32ShutDown (intQuit)
Next

End Function