vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: InitiateSystemShutdown 
Autor: Alde Oma
Datum: 05.05.03 23:11

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

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
InitiateSystemShutdown1.016Klesk25.04.03 15:28
Re: InitiateSystemShutdown461Master25.04.03 15:32
Re: InitiateSystemShutdown495Klesk01.05.03 16:28
Re: InitiateSystemShutdown449Elwood03.05.03 12:02
Re: InitiateSystemShutdown413Klesk04.05.03 12:50
Re: InitiateSystemShutdown416Elwood04.05.03 15:34
Re: InitiateSystemShutdown418Klesk04.05.03 20:19
Re: InitiateSystemShutdown397Elwood04.05.03 20:34
Re: InitiateSystemShutdown390Klesk04.05.03 20:36
Re: InitiateSystemShutdown438Elwood04.05.03 20:41
Re: InitiateSystemShutdown419Klesk04.05.03 20:43
Re: InitiateSystemShutdown430Alde Oma04.05.03 22:44
Re: InitiateSystemShutdown386Klesk05.05.03 20:16
Re: InitiateSystemShutdown423Alde Oma05.05.03 23:11
Re: InitiateSystemShutdown391Klesk06.05.03 13:06
Re: InitiateSystemShutdown395Elwood06.05.03 14:14

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel