Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0020: Windows herunterfahren, neustarten, Benutzer abmelden

 von 

Beschreibung 

Mit diesen vier APIs ist es via Programm möglich, Windows herunterzufahren, neuzustarten oder den aktuellen Benutzer abzumelden. Das alles kann sowohl im Hintergrund geschehen, als auch wie hier am Beispiel dargestellt über einen eigenen Dialog. Das Beispiel funktioniert nur unter Win 9x und Me, für NT-Systeme bzw. als umfassende Lösung ist Tipp 418 zu verwenden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

ExitWindowsEx (ExitWindows), FormatMessageA (FormatMessage), GetLastError, GetUserNameA (GetUserName)

Download:

Download des Beispielprojektes [3,14 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias FORM1.FRM  ---------
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Schaltfläche "Command3"
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Optionsfeld-Steuerelement "Option3"
' Steuerelement: Optionsfeld-Steuerelement "Option2"
' Steuerelement: Optionsfeld-Steuerelement "Option1"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit
'API's zur Benutzererkennung
Private Declare Function GetUserName Lib "advapi32.dll" _
        Alias "GetUserNameA" (ByVal lpBuffer As String, _
        nSize As Long) As Long
        
Private Declare Function GetLastError Lib "kernel32" () _
        As Long
    
Private Declare Function FormatMessage Lib "kernel32" _
        Alias "FormatMessageA" (ByVal dwFlags As Long, _
        lpSource As Any, ByVal dwMessageId As Long, ByVal _
        dwLanguageId As Long, ByVal lpBuffer As String, _
        ByVal nSize As Long, Arguments As Long) As Long


'API zum Beenden von windows
Private Declare Function ExitWindows Lib "User32" Alias _
        "ExitWindowsEx" (ByVal dwOptions As Long, ByVal _
        dwReserved As Long) As Long
           
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
 
Private Sub Form_Load()
  Dim User$
    User = Chr$(34) & User_Name & Chr$(34)
    If Len(User) > 2 Then Option1.Caption = User & " abmelden"
End Sub

Private Function User_Name() As String
  Dim L&, Ergebnis&, Fehler&
  Dim User$, Puffer$
  
      'Benutzernamen ermitteln
      User = Space(255)
      L = 255
      Ergebnis = GetUserName(User, L)
    
      If Ergebnis <> 0 Then
         User_Name = Left$(User, L - 1)
      Else
         User_Name = ""
      End If
End Function
 
 
Private Sub Command1_Click()
    If Option1.Value Then
        'Benutzer Abmelden
        ExitWindows EWX_LOGOFF, &HFFFF
        Unload Me
    ElseIf Option2.Value Then
        'Windows neu starten
        ExitWindows EWX_REBOOT, &HFFFF
    Else
        'Windwos herunterfahren
        ExitWindows EWX_SHUTDOWN, &HFFFF
    End If
End Sub

Private Sub Command2_Click()
  MsgBox "Warum denn jetzt schon ?"
  Unload Me
End Sub

Private Sub Command3_Click()
  MsgBox "Da ist nichts mehr zu helfen !"
  Unload Me
End Sub
'---------- Ende Formular "Form1" alias FORM1.FRM  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 20 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Felix am 20.12.2006 um 09:51

Hallo,

habe das Beispiel mal unter VB 2005 probiert, aber irgendwie will es nicht. Abmelden geht, Herunterfahren und Neustarten geht nicht.

Hatte das schmal jemand?

Kommentar von Haring am 02.01.2006 um 18:47

So mach ich das mit der Domain immer:

Set Network = CreateObject("WScript.Network")
MsgBox Network.UserDomain

Ich hoffe, es geht.

Kommentar von memo am 04.10.2005 um 21:06


Das Code was oben steht, funktioniert nicht !!

Da kommt folgender Fehlercode : Fehler beim Kompilieren.
Nach End Sub, End Function , End Property können nur Kommentare stehen.


Bitte um Hilfe

Bye

Kommentar von Fätzminator am 14.12.2004 um 12:13

kann mir jemand den code für xp geben??
wenn möglich per mail

mfg, fätzminator

Kommentar von Chrisian am 16.04.2004 um 12:54

Für Windows 2000 / XP einfach eine Windows Routine machen obs nen 2K oder XP Rechner ist.

Dann mit Shell("shutdown ARGUMENTE") runterfahren

chris

Kommentar von lars becker am 29.03.2004 um 16:25

Ich hab eine Frage. Wofür steht das zweite Argument "dwReserved As Long" bei der Funktion "exitwindows" ???
Ich hab es bis jetzt nur hinbekommen, dass der Benutzer abgemeldet wird
Danke Lars Becker
Lars.becker@web.de

Kommentar von Dominik am 27.10.2003 um 18:44

Habe auch XP und VB6
und bei ist das gleiche Problem, dass er bei 0,4,5,6 eine Logoff macht und sonst garnichts.

Kommentar von Benedikt am 25.08.2003 um 09:53

Im Ordner ist keine Datei vorhanden. :-(

Kommentar von Ruben Gerlach am 22.07.2003 um 15:57

Ich habe XP und VB6.
Bei den Parametern 0, 4, 5 und 6 macht der PC einen Logoff, sonst gar nichts.

Kommentar von Johannes am 12.07.2003 um 12:33

Mit folgende info zur API funktion ExitWindowsEx:
EWX_FORCE = 4 'Beendet alle Programme ohne zusätzliche Aufforderung
EWX_LOGOFF = 0 'Meldet sich neu am Netzwerk an
EWX_REBOOT = 2 'Startet den Computer neu
EWX_SHUTDOWN = 1 'Fährt den Computer herunter
EWX_POWEROFF = 8 'Fährt den Computer herunter und schaltet ihn ab


Mit dem Parameter EWX_POWEROFF beendet W2k alle Programme und schaltet den PC bei mir auch ab.

mfg johannes

Kommentar von .::crazycons::. am 17.10.2002 um 19:28

Trotz der Kommentare unten drunter bin ich noch etwas verwirrt. Ich suche auch einen Code, um win2000 herunter zu fahren. Wie mache ich das? Könnte mir jemand nen kompletten Code per mail zuschicken? wäre super.
mfg
de nixbligger

Kommentar von CHRTEK-Network am 14.07.2002 um 17:39

Ok brauche mal folgendes:
Unter NT/2000/XP das System herunterfahren, und neustarten, die Befehle ( Programmcodes dazu ) wäre ganz nett wenn einer mir das per Mail schick, erwähne dich auch im Programm :) Bald sind die ersten Infos und screenshots unter www.chrtek-network.de.vu zu finden :) Bye

Kommentar von Michael Finke am 14.03.2002 um 19:32

Habt ihr auch ein paar tips für Windows xp göht ihr mir die dann schicken ja dann schreib mir schnell züruck bis dann und die seite habt ihr super gemacht

Kommentar von Gerald am 24.02.2002 um 17:20

Hallo!!
Ich habe Windows XP!!
Bei mir funktioniert das Neustarten bzw. Herunterfahren nicht, was soll ich da machen damits läuft??
mfg Gerald

Kommentar von Remo am 28.01.2002 um 01:08

Kann mir mal jemand den Tipp für Win200 Senden?? ( .remo@web.de )
Danke

Kommentar von Nenad am 04.01.2002 um 11:33

Weshalb funktioniert die ExitWindowsEx-API bnei NT/2000 nur halb.Das System fahr NICHT runter ??
Gruss Nenad

Kommentar von D. Schüler am 03.02.2001 um 12:09

Hallo Meik!
Ich weiß wie du den PC runterfahrn und ausschalten kannst. Deklariere einfach noch 'ne Constante die sich EWX_POWEROFF nemnnt und belege sie mit dem Wert 3. Benutze dann im Code statt EWX_SHUTDOWN einfach EWX_POWEROFF. Ich habs unter Win95/98 gesestet.
Gruß
David

Kommentar von Meik am 09.12.2000 um 10:05

Ich habe ein Problem :
wenn man bei Win98 auf "Start-Beenden" geht und auf "Neustarten" klickt, bei gedrückter SHIFT-Taste, dann startet nicht der ganze PC neu, sondern nur Windows !
Kann man das auch mit EXITWINDOWS machen ???
Schreibt mir, wenn ihr eine Lösung wißt.

Kommentar von Peter am 04.12.2000 um 15:03

Der Tip is gut und funktioniert mit ein paar kleinen änderungen auch unter Windows 2000 jedoch bekommt man dann den Bildschirm, Sie können den Computer jetzt ausschalten.Das normale beenden von Windows 2000 mit (Start/Beenden) funzt jedoch einwandfrei mit dem ausschalten des Rechners. Wer hat denn dafür eine Lösung oder Idee ? Habe schon so einiges gecheckt jedoch ohne Erfolg !!!!!

Kommentar von Markus Ebertsch am 14.11.2000 um 17:06

Mit welcher Funktion bekommt man den Domain-Namen, und wie wird die angewand ?