1 Command (Command1) machen.
Dann einfach folgenden Code einfügen:
Option Explicit
' Windows-Version
' für den Aufruf der GetVersionEx-Funktion
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "Kernel32" _
Alias "GetVersionExA" (lpVersionInformation As _
OSVERSIONINFO) As Long
'System beenden + neu starten
Private Declare Function ExitWindowsEx Lib "user32" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Public Enum EWX_ACTION
EWX_LOGOFF = 0
EWX_SHUTDOWN = 1
EWX_REBOOT = 2
End Enum
'Für Windows NT/2000
Private Const ANYSIZE_ARRAY = 1
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
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 Const TOKEN_ADJUST_PRIVILEGES = 32
Private Const TOKEN_QUERY = 8
Private Const SE_PRIVILEGE_ENABLED As Long = 2
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 GetCurrentProcess Lib _
"Kernel32" () 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 OpenProcessToken Lib _
"advapi32.dll" (ByVal ProcessHandle As Long, _
ByVal DesiredAccess As Long, TokenHandle As Long) _
As Long
'Aktuelle Windows-Plattform ermitteln
Private Function GetWinPlatform() As Long
Dim osvi As OSVERSIONINFO
Dim strCSDVersion As String
osvi.dwOSVersionInfoSize = Len(osvi)
If GetVersionEx(osvi) = 0 Then
Exit Function
End If
GetWinPlatform = osvi.dwPlatformId
End Function
'Prüfen, ob Windows NT/2000
Public Function IsWindowsNT() As Boolean
Const dwMaskNT = &H2&
IsWindowsNT = (GetWinPlatform() And dwMaskNT)
End Function
'System herunterfahren/neu starten
'oder aktuellen Benutzer abmelden
Public Function RebootSystem(ByVal Action As EWX_ACTION) _
As Boolean
Dim ret As Long
Dim hToken As Long
Dim tkp As TOKEN_PRIVILEGES
Dim tkpOld As TOKEN_PRIVILEGES
Dim fOkReboot As Boolean
Const sSHUTDOWN As String = "SeShutdownPrivilege"
If IsWindowsNT() Then
' Windows NT wird ausgeführt.
' Sicherheitsüberprüfungen und
' Veränderungen sind jetzt notwendig,
' um sicherzustellen, daß das Token
' vorhanden ist, das einen Neustart zuläßt.
If OpenProcessToken(GetCurrentProcess(), _
TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) Then
ret = LookupPrivilegeValue(vbNullString, _
sSHUTDOWN, tkp.Privileges(0).pLuid)
tkp.PrivilegeCount = 1
tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
fOkReboot = AdjustTokenPrivileges(hToken, 0, tkp, _
LenB(tkpOld), tkpOld, ret)
End If
Else
' Win95/98 wird ausgeführt. Keine Aktion ist notwendig.
fOkReboot = True
End If
If fOkReboot Then _
RebootSystem = (ExitWindowsEx(Action, 0) <> 0)
End Function
Private Sub Command1_Click()
RebootSystem EWX_SHUTDOWN
End Sub Wenn du willst kannst du auch noch 2 Commands machen um Neuzustarten und um den Benutzer auszuloggen.
Einfach
RebootSystem EWX_REBOOT bzw.
RebootSystem EWX_LOGOFF
in den Commands eingeben
wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passw?rten
wintoolz.Filmdatenbank - Verwaltungssoftware f?r Filme
wintoolz.CodeGallery - Programm zum speichern von Codeschnipseln |