vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 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

Fortgeschrittene Programmierung
Re: Win Xp pro automatisch herunterfahren! 
Autor: Dartrax
Datum: 30.11.02 19:02

Folgenden Tipp habe ich bei vbarchiv gefunden. Er soll bei allen Windowsplattformen funktionieren. Hab nicht alle getestet, bei XP pro geht es jedenfalls.
Um den Tipp auszuprobieren, musst du in ein neies Projekt ein Modul einfügen und als Startoption Sub Main festlegen.
' 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
 
Sub Main()
RebootSystem EWX_SHUTDOWN
End Sub
 
'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
 
'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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Win Xp pro automatisch herunterfahren!632smsmaster0130.11.02 14:55
Re: Win Xp pro automatisch herunterfahren!375dbayer30.11.02 16:28
Re: Win Xp pro automatisch herunterfahren!406Dartrax30.11.02 19:02
Re: Win Xp pro automatisch herunterfahren!401INsider30.11.02 19:11
Re: Win Xp pro automatisch herunterfahren!61captain nemo01.12.02 16:51

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