VBS Script funktioniert nicht?
Hallo zusammen,
ich möchte gerne ein Script erstellen, dass die Windows Farbkalibrierung kurz öffnet einmal Enter und dann ESC tippt. Leider funktioniert das aber irgendwie nicht.
Hier mein Code:
Set oWsh = CreateObject("WScript.Shell")
oWsh.Run("dccw") oWsh.SendKeys ("{ENTER}")
oWsh.SendKeys ("{ESC}")
Hat jemand eine Idee wieso das nicht funktioniert? Das Programm öffnet sich, aber die SendKey Befehle funktionieren nicht....
3 Antworten
Hab das mal nachvollzogen, allerdings nicht mit dem ScriptingHost, sondern als Excel-Makro, das hatte ich grad offen und muss es auch nicht freigeben (WSH halte ich gerne gesperrt, aus Sicherheitsgründen)
Set oWsh = CreateObject("WScript.Shell")
oWsh.Run("notepad.exe")
oWsh.SendKeys ("t")
oWsh.SendKeys ("{ENTER}")
Bei mir läuft das Script schon weiter, während Notepad geöffnet wird, und Notepad empfängt das Signal gar nicht mehr.
Mit einem kleinen Delay (1/2 Sekunde) geht es dann:
'Am besten außerhalb der Subs
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'in der Sub
Set oWsh = CreateObject("WScript.Shell")
oWsh.Run("notepad.exe")
Sleep 500
oWsh.SendKeys ("t")
oWsh.SendKeys ("{ENTER}")
Allerdings kann ich jetzt nicht sagen, wie man in VBScript so ein Delay hinkriegt - notfalls mit einer Schleife. Eine Quick'n'Dirty-Lösung wäre so was wie
EndeZeit = Timer() + 0.5
Do While Timer() < EndeZeit
Loop
Nachteile: - lastet einen CPU-Kern zu 100% aus; - funktioniert nicht, wenn kurz vor Mitternacht aufgerufen
-----
Vermutlich ist ein Tool, das sich auf so was mehr spezialisiert hat, geeigneter, wie z. B. AutoHotkey
Delay macht man mit WScript.Sleep(ms), ms ist durch die Zeit in Millisekunden zu ersetzen ;)
Probiere mal, ein
WScript.Sleep(5000)
vor die Tastatureingabe zu machen ;)
Wie bereits gesagt startet das Programm ja nicht sofort, 5000 Millisekunden (5 Sekunden) Verzögerung reichen auf jeden Fall, du kannst aber natürlich auch weniger oder mehr Millisekunden "schlafen" lassen ;)
Die runden Klammern weglassen, dann sollte es klappen
Schau mal hier im Example
https://social.technet.microsoft.com/wiki/contents/articles/5169.vbscript-sendkeys-method.aspx
Ich habe das Problem bei mir am Rechner einmal nachvollzogen. So wie ich das sehe ist der Window Focus nicht auf dem Formular für das DCCW. Allerdings konnte ich auch nicht mittels AppActivate den Focus auf das Window erzwingen.
Ohne Klammern funktioniert es bei mir übrigens im Notepad ohne Probleme, wobei die Antwort von PWolff mit berücksichtigt werden muss, da hier ein Delay berücksichtigt werden muss.
Nein, die Runden Klammern müssen bleiben sonst funktioniert das gar nicht und ich erhalte dann Fehlermeldungen.
Ich habe das Programm zum testen mal mit Notepad.exe ausprobiert, dabei macht es dann genau diese schritte nur mit der Farbkalibrierung nicht...
Set oWsh = CreateObject("WScript.Shell")
oWsh.Run("dccw")
oWsh.SendKeys "{ENTER}"
oWsh.SendKeys "{ESC}"
Habe es jetzt so angepasst, trotzdem geht es nicht..