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.
Verwendete 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