VB 5/6-Tipp 0020: Windows herunterfahren, neustarten, Benutzer abmelden
von ActiveVB
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: | Verwendete API-Aufrufe: ExitWindowsEx (ExitWindows), FormatMessageA (FormatMessage), GetLastError, GetUserNameA (GetUserName) | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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 ?