Tipp 3.7 - Neustart des Rechner

Wie kann ich einen Neustart-Dialog nach Systemänderung aufrufen?

Mit dieser Funktion können Sie einen Neustart-Dialog nach Systemänderung aufrufen. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Api-AufrufeVerwendete Win32-Api-Aufrufe und Typen: SHRestartSystemMB, GetVersionEx - OSVERSIONINFO

Beispiel:

Option Explicit
 
Public Enum EXIT_FLAGS
  EWX_LOGOFF = 0  ' WinNT
  EWX_SHUTDOWN = 1  ' WinNT
  EWX_REBOOT = 2  ' WinNT
  EWX_FORCE = 4  ' WinNT
  EWX_POWEROFF = 8  ' WinNT
  EWX_SHUTDOWNPWROFF = EWX_SHUTDOWN + EWX_POWEROFF  ' WinNT
  SHRS_EXIT_NO_DEFPROMPT = 1  ' Win9x
  SHRS_REBOOT_SYSTEM = 2  ' Win9x
End Enum
 
Public Type OSVERSIONINFO
  dwOSVersionInfoSize    As Long
  dwMajorVersion         As Long
  dwMinorVersion         As Long
  dwBuildNumber          As Long
  dwPlatformID           As Long
  szCSDVersion           As String * 128
End Type
 
Public Declare Function SHRestartSystemMB _
    Lib "shell32.dll" Alias _
    "#59" (ByVal hOwner As Long, _
    ByVal sExtraPrompt As String, _
    ByVal uFlags As Long) As Long  'undokum. Funktion!
Public Declare Function GetVersionEx _
    Lib "kernel32" Alias _
    "GetVersionExA" _
    (lpVersionInformation As OSVERSIONINFO) As Long
 
Public Function RestartDialog( _
                lType As Long, _
                Optional sPrompt _
                As String = vbNullString) _
                As Long
  '// -----------------------------------------------------
  '// Methode:   | Zeigt den Dialog zur Aufforderung zum
  '//            | Neustart an!
  '// -----------------------------------------------------
  '// Parameter: | lType = Typ des Neustarts (s.o.)
  '//            | sPrompt = optionaler Hinweis; wird vor
  '//            | dem restlichen Dialogtext vorgestellt
  '//            | (ggf. vbCrLf anfügen!)
  '// -----------------------------------------------------
  '// Rückgabe:  | Long-Wert der API-Funktionsrückgabe
  '// -----------------------------------------------------
  '// Autor:     | Stefan Kulpa
  '//            | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Der Dialog trägt immer den Titel: "Geänderte
  '// Systemeinstellung"
  '// -----------------------------------------------------
  '// Beispiel:
  '// RestartDialog EWX_LOGOFF, _
   '//               "Anpassungen durchgeführt!" & vbCrLf
  '// -----------------------------------------------------
  Dim uFlag   As Long
  Dim sTitle  As String
 
  On Error Resume Next
  If IsWinNT Then
    Select Case lType
    Case EWX_LOGOFF: uFlag = lType
    Case EWX_SHUTDOWN: uFlag = lType
    Case EWX_REBOOT: uFlag = lType
    Case EWX_FORCE: uFlag = lType
    Case EWX_POWEROFF: uFlag = lType
    Case Else: Exit Function
    End Select
  Else
    Select Case lType
    Case SHRS_EXIT_NO_DEFPROMPT: uFlag = lType
    Case SHRS_REBOOT_SYSTEM: uFlag = lType
    Case Else: Exit Function
    End Select
  End If
  If VBA.Len(sPrompt) = 0 Then sPrompt = _
      "Achtung!" & vbCrLf
 
  sTitle = sPrompt
  If Len(sTitle) > 0 Then sTitle = CheckString(sTitle)
  RestartDialog = _
      SHRestartSystemMB(ByVal GetDesktopWindow(), _
      ByVal sTitle, ByVal uFlag)
 
End Function
 
Public Function CheckString( _
                ByVal sValue As String) As String
 
  If IsWinNT Then
    CheckString = StrConv(sValue, vbUnicode)
  Else: CheckString = sValue
  End If
 
End Function
 
Public Property Get IsWinNT() As Boolean
 
  Const VER_PLATFORM_WIN32_NT As Long = 2
  Dim uOSVer                  As OSVERSIONINFO
  uOSVer.dwOSVersionInfoSize = Len(uOSVer)
  GetVersionEx uOSVer
  IsWinNT = (uOSVer.dwPlatformID = VER_PLATFORM_WIN32_NT)
 
End Property