VB-Script (.vbs) für Windows Autostart (Programm starten Abfrage) zeitgesteuert

Viper73

Grünschnabel
Hallo zusammen,

ich möchte mir ein .vbs Script in den Windows Autostart packen. Das soll nach 30 Sekunden ein Programm starten. Man sollte aber manuell auch ein anderes Starten können oder das ganze auch abbrechen können.

Dieses soll also in etwa so aussehen:

Visual Basic:
Welches Programm willst du starten:

1 = Programm 1 (mspaint)
2 = Programm 2 (calc)
0 = Script abbrechen (ohne Auswahl)

Nach 30 Sekunden ohne Eingabe wird automatisch (1) gestartet.

Ich habe mal zwei gebastelt (ähnliche im Internet gefunden und abgeändert für meine Zwecke)
Bei Versuch 1 ist alles hintereinander was unpraktisch ist. Auch mein Zeitlimit fehlt.
Bei Versuch 2 starten die Programme wie gewünscht, aber auch kein Zeitlimit.

Vielleicht kann mir jemand noch zeigen wie man ein Zeitlimit einbauen kann nach dem dann Programm 1 automatisch gestartet wird wenn keine Eingabe erfolgt!?
Versuch 1 müsste man noch stark umbauen damit es nicht hintereinander abgefragt wird, sondern auch ähnlich wie das YesNoCancel abläuft.
Versuch 2 wäre mit einem Zeitlimit ja dann eigentlich schon fertig.


Versuch 1 (hintereinander und ohne Zeitlimit):

Visual Basic:
Option Explicit
Dim obj, a, b, c
'a=Programm1(mspaint) b=Programm2(calc) c=cancel

Set obj = CreateObject("wscript.shell")

a=MsgBox("Open Programm1 (a) mspaint?",vbYesNo+vbQuestion+vbSystemModal)

If a=vbYes Then
  obj.Run """C:\Windows\System32\mspaint.exe"""
  b=MsgBox("Open Programm2 (b) calc",vbYesNo+vbQuestion+vbSystemModal)
Else
  b=MsgBox("Open Programm2 (b) calc",vbYesNo+vbQuestion+vbSystemModal)
End If


If b=vbYes Then
  obj.Run "C:\Windows\System32\calc.exe"
  c=MsgBox("cancel (c)",vbYesNo+vbQuestion+vbSystemModal)
Else
  c=MsgBox("cancel (c)",vbYesNo+vbQuestion+vbSystemModal)
End If

If c=vbYes Then
  WScript.Quit
Else

  WScript.Quit
End If

Versuch 2 (ja/nein/cancel aber ohne Zeitlimit):

Visual Basic:
Set obj = CreateObject("wscript.shell")
x=msgbox("Titel" ,3, "Text")
If x = vbYes Then obj.Run "C:\Windows\System32\mspaint.exe"
If x = vbNo Then obj.Run "C:\Windows\System32\calc.exe"

Wäre super wenn mir hier jemand weiterhelfen könnte.
Gruß, Viper73
 

Yaslaw

alter Rempler
Moderator
Für die Frage kannst du ja die InputBox verwenden. Dann kann man wirklich mit 1,2,3 antworten
VBScript - InputBox Function

Für das andere Problem musst du dich wahrscheinlich mit Multi-Thread auseinander setzen. Ich habe damit keine Erfahrung. ABer es muss ja 2 Code-Teile paralell laufen.

Oder du findest im WWW eine Funktion für eine InputBox mit Timeout. Die Normale von VBS kann das nicht.
Ev: vbscript, Inputbox with timeout option / Pause
 

Viper73

Grünschnabel
Erstmal Danke für deine Antwort.

Ich hatte mal sowas überlegt, aber scheitere daran da ich die Befehle nicht kenne/finde:

Ich wollte einen Code vor meinem Versuch 2 (YesNoCancel) machen, ich schreibe einfach aus wie ich mir diesen Vorstelle:

Code:
- eine "wenn/dann" Funktion einbauen (ganz am Anfang vom Script)
- wenn 30 Sekunden lang keine Taste gedrückt wird dann Programm xyz starten und script beenden
- andernfalls (wenn eine Taste also [Enter - oder evtl. auch eine beliebige Taste] gedrückt wird) weiter im Code (YesNoCancel Script geht weiter bzw. msgbox geht auf... siehe Script weiter unten)

Set obj = CreateObject("wscript.shell")
x=msgbox("Titel" ,3, "Text")
If x = vbYes Then obj.Run "C:\Windows\System32\mspaint.exe"
If x = vbNo Then obj.Run "C:\Windows\System32\calc.exe"

Ich dachte mir sowas müsste ja irgendwie gehen und wäre nicht so kompliziert wie so ein Multi-Threat.
Vielleicht kann ja jemand sowas dranbasteln, dann wäre ich schon da wo ich hinwill.
 

Yaslaw

alter Rempler
Moderator
Das wenn/dann oder Zahleneingabe ist einfach. Der Timer ist das Problem.
VBS ist ein Script. Das läuft von oben nach unten durch. Wenn da ein Popup aufgeht, da steht das Script bis die Eingabe getätigt ist. Also braucht es ein Popup mit Timer (ist kein Standard-VBS) oder einen zweiten Container (Thread) der parallel dazu läuft und den Timer mit der Aktion bei Ablauf beinhaltet.
 

Viper73

Grünschnabel
Wäre dann eine andere Programmiersprache evtl. besser für mein Vorhaben?

Ich denke bei einer .bat Datei werde ich wohl das selbe Problem haben.
Was wäre mit powershell, ginge es damit? Oder mit was könnte ich das am besten umsetzen? (Autohotkey vielleicht?)

Es müsste halt etwas sein bei dem ich nicht erst großartig eine Laufzeitumgebung installieren muß sondern das mit Windows funktioniert. Autohotkey installieren wäre auch noch ok falls es damit gehen würde.

EDIT:
Oder ist es mit .vbs (oder autohotkey) möglich:
2 getrennte scripts zu starten:

script a = autostart Programm nach 30 sekunden
script b = Auswahlfenster (YesNoCancel)

und aber bei b) auch das script a) zu beenden? Oder kann man immer nur das eigene script beenden und kein anderes das separat gestartet in einem anderen "Prozess" gestartet wurde?
 
Zuletzt bearbeitet:

Viper73

Grünschnabel
Also per autohotkey könnte das gehen, ich habe da etwas gefunden:

script a:
Code:
^!#+F11::ExitApp
start von Programm1 nach 30 sekunden

script b:
Code:
start Auswahlfenster (YesNoCancel)
bei jedem Ergebnis das angeklickt wird (yes, no, cancel) noch folgendes anfügen
Send, ^!#+{F11}

Wenn ich das richtig verstehe:
(Erklärung: "Send, ^!#+{F11}" = die Tasten [Shift]+[Crtl]+[Alt]+[Win]+F11 drücken)

Script a läuft und nach 30 Sekunden startet mein Programm. Aber wenn es die Tastenkombi wie oben geschrieben bekommt/erfasst dann beendet es sich vorzeitig

Script b läuft und sendet bei Auswahl einer Option die Tastenkombi zum beenden von Script a.

Wenn das so funktioniert könnte ich das noch andersrum mit einer anderen Tastenkombi einbauen, somit würde jeweils das eine Script das andere schließen. Oder mache ich da einen Denkfehler?