Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBScript - Shutdowndialog mit Timer

Frage Entwicklung Batch & Shell

Mitglied: DerRegistrar

DerRegistrar (Level 1) - Jetzt verbinden

26.01.2011, aktualisiert 06:47 Uhr, 7324 Aufrufe, 11 Kommentare

Shutdown Dialog anzeigen mit Timer bis automatisch heruntergefahren oder durch den Benutzer über den Dialog abgebrochen wird.

Liebes Forum,

schon häufig habe ich mich bei IT-Problemen an Google gewandt und bin auf Euch gestossen um von der unglaublich tollen Hilfe etwas abzuschöpfen... Ihr habt mir bei so einigen Problemen weitergeholfen - VIELEN DANK DAFÜR!! Im Übrigen eine unglaublich vorbildliche Programmierung des Forums, habe bisher noch NIE ein so benutzerfreundliches gesehen, nicht nur die Programmierung - Auch die ART DER HILFE! - Revolution! (OK genug geschleimt ^^)

Nun zu meinem Problem!

Hintergrund:
Ich bin schon seit nunmehr 6 Stunden damit beschäftigt, den Laptop meiner werten Mutti wieder etwas mehr zu automatisieren.
Da meine liebe Mutti oft den Laptop mitsamt Video vor dem Einschlafen neben sich stehen lässt und es nicht mehr schafft ihn auszumachen. (Ein bisschen Öko bin ich ja schon)
Für die Umsetzung meiner Idee benötige ich die Möglichkeit, den Computer: Windows Vista, x86 (32-Bit) - Automatisch herunterfahren zu lassen, sobald keine Aktivität mehr vorhanden ist.

Einfach Programm aus dem Internet nutzen? - Will ich nicht! - Warum:
Dies lässt sich mit zwar mit externen Programmen (Autoshutdown etc.) realisieren, jedoch fehlt mir darin einfach die Transparenz, da solche Programme nicht OpenSource sind und ich mich bzw. meine Mutti 1. Performancemässig im Nachteil sehe, außerdem 2. Die Sicherheit fehlt, dass das Programm keinen Quatsch anstellt (Ala unnötige Registry-/Dll-/Treiber-Einträge o. ä.). - Das System soll ABSOLUT SAUBER vor solchem Quatsch bleiben, deswegen kommen auch nur die nötigsten und sinnvollsten Programme auf diesen Rechner.
Ich bitte diesbezüglich keine Diskussion anzufangen, ich möchte schließlich einen Lösungsweg zu meinem Problem der Realisierung dieser Idee (Das selbstständige Programmieren/Scripten einer solchen Dienstleistung) und nicht des (nichtvorhandenen Problemes) der "Nicht-Einsicht" bzw. der Nichtakzeptierung fremder Software. - Sofern das jemand annehmen sollte. - Ich möchte nicht diskutieren wie sinnvoll es ist, denn das ist es für mich.
- Gebe ich nur deswegen an, da in vielen Foren diskutiert wird warum und wie sehr man etwas möchte -

Meine Realisierungsidee:
Ich wollte das ganze nun per VBS-Script realisieren, konnte es aber in keinster Weise in eine Funktionalität zustandebringen, die weiterbrachte - meine Lösungsidee war nun, das Script um eine bestimmte Uhrzeit (22:30 Uhr) starten zu lassen, damit es:
Einen Dialog anzeigt mit der Frage, ob der Computer heruntergefahren werden soll.
Falls Nein, sollte das Script dann 1 Stunde warten und diesen Dialog erneut anzeigen.
Falls Ja, sollte das Script den Computer bei Ablauf der 5 Minuten ab dem Anzeigen des Dialoges ohne Wenn und Aber herunterfahren.
Falls 5 Minuten keine Eingabe im Dialog geschieht, soll der Computer ohne Wenn und Aber herunterfahren.

Mein Script (bin nicht stolz auf "Mein" Script, sondern möchte hier nur hervorheben damit man beim Überfliegen schnell findet was man sucht :P)
hatte viele verschiedene Aussehen, jedes mal in VBS, konnte jedoch keine Lösung erarbeiten.
Aktuell sieht es so aus:
01.
set wshell = CreateObject("Wscript.shell") 
02.
 
03.
Dim Dialog, Waiting, a 
04.
 
05.
Dialog=0 
06.
Waiting=0 
07.
a="leer" 
08.
Do While (Running=1) 
09.
 
10.
	Do While (Dialog=0) AND (Waiting=0) 
11.
		Dialog=1 
12.
		Waiting=0 
13.
		runterfahren = MsgBox("Soll der Computer in 5 Minuten heruntergefahren werden?", vbYesNo + vbQuestion, "Herunterfahren") 
14.
		If runterfahren = vbNo Then 
15.
			ab = MsgBox("Der Computer wird nicht heruntergefahren. Erneuter Versuch in 1 Stunde.", vbOK, "Herunterfahren") 
16.
			Waiting=-3599700 
17.
		Else If runterfahren = vbYes Then 
18.
		Dialog=0 
19.
		Waiting=301 
20.
		End If 
21.
	Do While (Waiting<=300) 
22.
		wscript.sleep (1000) 
23.
		Waiting=Waiting+1 
24.
	Loop 
25.
	Do While (Dialog=0) AND (Waiting>=300) 
26.
		WScript.Quit 
27.
	Loop 
28.
Loop
Wie Ihr sicher schon herausgelesen habt - besonders viel Erfahrung in VBS oder BATCH habe ich nicht, dennoch gebe ich mir alle Mühe.
Das einzige was ich relativ gut kenne ist LSL (Linden Scripting Language) und HTML.

Wie also könnte ich es noch realisieren?
Kann ich bei VBS etwas besser machen (Fehler)?
Sollte ich eine andere Programmiersprache benutzen?
Gibt es vielleicht sogar eine noch bessere Lösung (Mit Aktivitätsüberwachung und Shutdown-Timer) mithilfe von VBS und/oder Batch?
Oder gibt es für mich nur Hoffnung, ein Programm aus dem Netz zu benutzen (was ich nicht möchte).
Aber schließlich möchte ich auch nicht mein halbes Leben nur wegen einem "Shutdown Timer" verplempern... So viel ist es meiner Mutti dann sicher auch nicht wert...

Mit lieben Gruß
Der Registrar
Mitglied: TsukiSan
26.01.2011 um 06:58 Uhr
Hallo Der Registrar,

ich würde es etwas anders machen. Warum?
1) wenn du eine Messagbox startest, dann wartet das Programm, bis jemand etwas tut
(ok oder cancel drücken, Stecker ziehen etc.)
Das heißt, dein "Timer" läuft da nicht und der Rechner bleibt schon wieder die ganze Nacht an.

Wie wäre da ein Popup-fenster an dieser Stelle, dass aussieht, wie eine Messagebox?
Beispiel:
01.
Set ws = CreateObject("WScript.Shell")  
02.
a = ws.popup( "Nach 3 Sekunden bin ich wieder weg.",3,"Messageboxmeldung",vbyesno) 
03.
msgbox a
Jetzt könntest du "a" abfragen, ob was passiert ist und wenn JA, welcher Button wurde gedrückt.
JA = 6
Nein = 7
Keiner von beiden = -1

Du kannst auch die Stunde Wartezeit wie folgt ablaufen lassen
01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
       'Aufruf einer Sub-Routine zum Beispiel 
05.
       ' in der du deine Abfragen reinbastelst 
06.
      Wscript.Sleep Wartezeit 
07.
next 
08.
 
09.
Wscript.Quit
jetzt würde die FOR-Schleife maximal 4 Mal aufgerufen. Heißt in dem Beispiel bis zu 4 Stunden maximal.

Vielleicht sind das ein paar Anregungen, dich in deinem Vorhaben weiterzubringen.

Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:25 Uhr
Hi TsukiSan!!!

Vielen Dank für deine schnelle und aufschlussreiche Antwort, dies scheint mich doch etwas weiterzubringen.
Leider funktioniert mein darauf basierendes Script nicht, was mache ich bloss falsch?
Meine Fehlermeldung: ... Zeile 13 Zeichen 13 - End erwartet ...

Mein Script sieht jetzt wie folgt aus:
01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
		Set ws = CreateObject("WScript.Shell")  
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno) 
06.
		msgbox a 
07.
	If (a=6) Then 
08.
      		Wscript.Sleep Wartezeit 
09.
	Else If (a=7) OR (a=-1) Then 
10.
		Set oShell = WScript.CreateObject("WScript.Shell")  
11.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
12.
 
13.
Wscript.Quit

[EDIT]

Ich habe den Fehler gefunden, jedoch habe ich jetzt ein anderes Problem.
Sobald ich auf "Nein" klicke, bekomme ich ein Popup mit "7" und dem Button "OK".
Warum?


01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
		Set ws = CreateObject("WScript.Shell")  
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno) 
06.
		msgbox a 
07.
	If (a=6) Then 
08.
      		Wscript.Sleep Wartezeit 
09.
	Else If (a=7) OR (a=-1) Then 
10.
		Set oShell = WScript.CreateObject("WScript.Shell")  
11.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
12.
 
13.
End If 
14.
End If  
15.
Next 
16.
Wscript.Quit
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:33 Uhr
Hi Der Registrar,

da fehlen am Ende das "END IF" und danach das "Next". Das mal vorneweg.

ansonsten könntest du ab Zeile 09 es etwas umschreiben:
01.
Else 
02.
                Set oShell = WScript.CreateObject("WScript.Shell")  
03.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
04.
End If 
05.
 
06.
Next
Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:40 Uhr
Ok, ich sehe - Ein vollnoob am Werk *schäm*.

Also ich habe den Code jetzt ergänzt, bekomme wieder einen Fehler:
Zeile: 11
Zeichen: 2
Fehler: Syntaxfehler

01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
		Set ws = CreateObject("WScript.Shell")  
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno) 
06.
		msgbox a 
07.
	If (a=6) Then 
08.
      		Wscript.Sleep Wartezeit 
09.
	End If 
10.
	Next 
11.
	Else 
12.
                Set oShell = WScript.CreateObject("WScript.Shell")  
13.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
14.
	End If 
15.
	Next 
16.
Wscript.Quit 
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:46 Uhr
Ok, ich sehe - Ein vollnoob am Werk *schäm*.

Macht ja nix. Wir üben alle noch

vergleiche mal bitte:
01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
		Set ws = CreateObject("WScript.Shell")  
05.
		a = ws.popup( "Der Computer soll in 1 Minute runterfahren. Abbrechen?",60,"Messageboxmeldung",vbyesno) 
06.
	If a=6 Then 
07.
      		Wscript.Sleep Wartezeit 
08.
	Else 
09.
                Set oShell = WScript.CreateObject("WScript.Shell")  
10.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
11.
	End If 
12.
Next
Gruss
Tsuki
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 07:55 Uhr
*facepalm*

Wieso klappt es nur bei mir nie ^^!!!
Ach bin ich glücklich, dass es nun endlich klappt!!!!!!!!!!!!!!

Mutti wird sich freunnnnnnnnnnnnn!!!!
Und die Umwelt auch! ( Dafür der Energiekonzern umso weniger )

DAUMEN HOCH (wobei, lieber führen wir diesen bescheuerten Trend hier nicht ein) für ADMINISTRATOR.de und TsukiSan!
Vielen Dank für die zur Problemlösung sehr beitragende Unterstützung!!!

Wie kann ich mich adäquat revangieren?
Bitte warten ..
Mitglied: TsukiSan
26.01.2011 um 07:58 Uhr
Freud mich, dass es funktioniert!

Wie kann ich mich adäquat revangieren?
immer mal vorbeischauen und oben grünes Häkchen setzen

Gruss
Tsuki
Bitte warten ..
Mitglied: 76109
26.01.2011 um 09:07 Uhr
Hallo zusammen!

Das Problem hat Tsuki mit den richtigen Ansätzen ja eigentlich schon gelöst, aber es könnte auch etwas einfacher gehen.

Auf jeden Fall, würde ich bei älteren Leuten eine einfachere Fragestellung in der PopUp-Meldung ausgeben, die unmissverständlich eine Ja/Nein-Beantwortung zuläßt

Das mit der For-Schleife verstehe ich auch nicht ganz, weil wenn Deine Omi 4 Stunden durchhält, dann würde der Laptop danach ohne weitere Abfragen die ganze Nacht über durchlaufen?

Also mein Lösungsvorschlag würde etwas vereinfacht so aussehen:
01.
Const Msg = "Soll der Laptop jetzt herunterfahren?" 
02.
  
03.
Set oShell = CreateObject("WScript.Shell") 
04.
     
05.
Do While oShell.PopUp(Msg, 60, "Meldung...", vbYesNo) = vbNo 
06.
   Wscript.Sleep 3600000 
07.
Loop 
08.
 
09.
oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
Gruß Dieter
Bitte warten ..
Mitglied: DerRegistrar
26.01.2011 um 17:27 Uhr
Hi Dieter!

Danke für deinen Vorschlag, OMI ist sie zwar zum glück nicht, aber noch einfacher, noch besser ;).
Ich habe jedoch so lange an dem Code rumgebastelt... "never touch a running system...".
Vielleicht später

Hier mein aktueller, funktionsfähiger Code inklusive der BATCH Datei:

VBS:
01.
Dim Wartezeit 
02.
Wartezeit = 3600000 ' eine Stunde in Millisekunden 
03.
for i = 0 to 3 
04.
		Set ws = CreateObject("WScript.Shell")  
05.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno) 
06.
		If (a=-1) Then 
07.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno) 
08.
		End If 
09.
		If (a=-1) Then 
10.
		a = ws.popup( "Der Computer soll heruntergefahren werden." & vbLf & "Ja - Jetzt herunterfahren" & vbLf & "Nein - In 1 Stunde nochmal fragen",30,"Herunterfahren",vbyesno) 
11.
		End If 
12.
	If a=7 and i<=3 Then 
13.
		a = ws.popup( "Es wird in 1 Stunde erneut gefragt, ob der Computer heruntergefahren werden soll.",15,"Herunterfahren") 
14.
      		Wscript.Sleep Wartezeit 
15.
	Else 
16.
		a = ws.popup( "Der Computer wird in 1 Minute heruntergefahren.",10,"Runterfahrn") 
17.
                Set oShell = WScript.CreateObject("WScript.Shell") 
18.
		oShell.Run "C:\Users\User\Systemdateien\Shutdown\shutdown.bat", 0 
19.
		Wscript.Quit 
20.
	End If 
21.
Next
BATCH:
01.
@echo off 
02.
cd\ 
03.
cls 
04.
echo Shutdown..... 
05.
shutdown -s -t 60 -f -c "Herunterfahren in 1 Minute."
Bitte warten ..
Mitglied: 76109
27.01.2011 um 09:42 Uhr
Hallo DerRegistrar!

Sorry, weiß auch nicht, wie ich auf die Omi gekommen bin. War jedenfalls mit "i" am Ende

Naja und zu Deinem Code, den Du so mühsam erarbeitet hast, sage ich mal besser nix

Jedenfalls, brauchst mit dieser Codezeile keine extra Batch-Datei:
01.
oShell.Run "cmd \c shutdown -s -t 60 -f", 0
Gruß Dieter
Bitte warten ..
Mitglied: TsukiSan
27.01.2011 um 13:48 Uhr
Hallo didi1954,

eigentlich ist der Beitrag ja gelöst, aber NUR für diejenigen, die eine XP-Maschine haben
und die es interessiert dieser Zusatz
zum Runterfahren des Rechners aus VBS heraus:
01.
oShell.Run "shutdown.exe /s /T 20 /C """ & "PC wird runtergefahren!""" 
Viele Grüße

Tsuki
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

Windows 7
Windows 7: Per VBScript Netzwerkdrucker ersetzen (1)

Frage von donnyS73lb zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...