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: Pc Herunterfahren Lassen und Neustarten lassen?! 
Autor: Dartrax
Datum: 01.11.02 23:32

Hi,
Ich kenne die zwei API-Funktionen SetSystemPowerState und SetSuspendState.
Außerdem kommt es drauf an, auf welchem Betriebssystem das laufen soll.

Ich hab mal folgenden Tipp gefunden, er soll für alle Windows-Versionen gelten:

' 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_REBOOT
End Sub
 
'System neu starten
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
Wenn du noch weitere Funktionen brauchst, ich hab noch welche für:
Herunterfahren,
Ruhezustand (Win XP),
Herunterfahrendialog anzeigen,
Benutzerdialog abmelden.

Gruss,
______
Dartrax
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Pc Herunterfahren Lassen und Neustarten lassen?!181Exp-Soft01.11.02 21:55
Re: Pc Herunterfahren Lassen und Neustarten lassen?!818Ossi01.11.02 23:28
Re: Pc Herunterfahren Lassen und Neustarten lassen?!790Dartrax01.11.02 23:32
Jo Thx und ich breuchte nochwas!126Exp-Soft01.11.02 23:47
Re: Jo Thx und ich breuchte nochwas!819Dartrax02.11.02 00:16

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