VBS GoTo funktioniert nicht
Hallo Administratoren,
ich programmiere gerade einen VBS Script, der ein Fenster in den Fordergrund stellt und dann eine Tastatureingabe simuliert.
Dies möchte ich in einer Schleife haben das sieht so aus:
Ich weiß aber nicht wo der Fehler liegt.
Der Error befindet sich in der 6. Zeile, 1. Zeichen
Hätte jemand eine Idee?
Gruß Motorcross
ich programmiere gerade einen VBS Script, der ein Fenster in den Fordergrund stellt und dann eine Tastatureingabe simuliert.
Dies möchte ich in einer Schleife haben das sieht so aus:
set WshShell = CreateObject("WScript.Shell")
anfang:
WScript.Sleep 180000
WshShell.AppActivate "ProfiLab"
WshShell.SendKeys "{ENTER}"
GoTo anfang
Der Error befindet sich in der 6. Zeile, 1. Zeichen
Hätte jemand eine Idee?
Gruß Motorcross
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141276
Url: https://administrator.de/contentid/141276
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
10 Kommentare
Neuester Kommentar
Hiho,
also diese Lösung finde ich nicht so gelungen da Sie eine Endlosschleife erzeugt die man nur mittels Taskmanager killen kann...
Wie wärs mit so einer Lösung?
Die Lösung macht sichtbar das das Script läuft, es lässt sich beenden, es schickt die Tasten nur an ein fest definiertes Fenster und zeigt die Anzahl der erfolgreichen Versuche.
Der Nachteil ist allerdings das nebenbei nicht am PC gearbeitet werden kann, aber ich vermute mal du brauchst das aus dem Grund um den PC unbeobachtet eine Aufgabe ausführen zu lassen die gelegentlich ne Frage stellt und auf eine Benutzereingabe wartet. Wenn ja sollte das genau das richtige für dich sein ;)
grüße
also diese Lösung finde ich nicht so gelungen da Sie eine Endlosschleife erzeugt die man nur mittels Taskmanager killen kann...
Wie wärs mit so einer Lösung?
set WshShell = WScript.CreateObject("WScript.Shell")
windowName = "Server ist ausgelastet" 'Hier muss der Titel des Fenster eingetragen werden an den der Tastendruck gesendet werden soll. Titel! also Titelleiste :)
choice = MsgBox ("Mit OK starten")
answer = 0
counter = 0
while answer <> 6
result = false
result = WshShell.AppActivate (windowName) 'Hier wird versucht ein Fenster mit diesem Namen zu finden und zu fokussieren
if result = true then
'Send "{TAB}" eventuell benötigt um bei einem aufgehenden Fenster die Standardantwort durchzuschalten. bspw von No auf YES
Send "{ENTER}"
counter = counter + 1
end if
answer = WshShell.Popup("Sendkey beenden?" & vbcrlf & vbcrlf & "Bisherige Treffer: " & counter,3, "Frage", 4 + 32)
WScript.Sleep 1000
wend
msgbox "Sendkey beendet"
sub Send (sendString)
WScript.Sleep 100
WshShell.SendKeys sendString
end sub
Die Lösung macht sichtbar das das Script läuft, es lässt sich beenden, es schickt die Tasten nur an ein fest definiertes Fenster und zeigt die Anzahl der erfolgreichen Versuche.
Der Nachteil ist allerdings das nebenbei nicht am PC gearbeitet werden kann, aber ich vermute mal du brauchst das aus dem Grund um den PC unbeobachtet eine Aufgabe ausführen zu lassen die gelegentlich ne Frage stellt und auf eine Benutzereingabe wartet. Wenn ja sollte das genau das richtige für dich sein ;)
grüße
Hallo @ChrFriedel,
mit seinem eigenartigen GoTo-Konstrukt hätte @Motorcross auch eine Endlose Iteration erzeugt. Ich habe seien Code nur auf ein funktionierendes Level gebracht.
übrignes passen deine Sleep-Zeiten nicht mit den benötigten Werten zusammmen. Wozu überhaupt der Sleep nach der MsgBox?
Gruß
Snow
mit seinem eigenartigen GoTo-Konstrukt hätte @Motorcross auch eine Endlose Iteration erzeugt. Ich habe seien Code nur auf ein funktionierendes Level gebracht.
übrignes passen deine Sleep-Zeiten nicht mit den benötigten Werten zusammmen. Wozu überhaupt der Sleep nach der MsgBox?
Gruß
Snow
Huhu Snowman,
ich meinte auch nicht speziell deine Lösung sondern das ganze Prinzip. Bin gegen Endlosschleifen ;)
Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus und dann wieder einblendet ;) Und wenn man dort höhere Werte verwendet kann man einstellen wie lange man vom nächsten Versuch verschont bleibt. Bspw 180000ms ;)
Grüße
ich meinte auch nicht speziell deine Lösung sondern das ganze Prinzip. Bin gegen Endlosschleifen ;)
Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus und dann wieder einblendet ;) Und wenn man dort höhere Werte verwendet kann man einstellen wie lange man vom nächsten Versuch verschont bleibt. Bspw 180000ms ;)
Grüße
Zitat von @ChrFriedel:
Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus und
dann wieder einblendet
Jetzt bin ich neidisch... Ich musste mir dafür extra 'n FadeIn-/FadeOut-Schnipsel schreiben, damit das klappt (schleife mit opacity usw..). Problem dabei: Auf Rechnern mit schwacher GraKa bzw. ohne GraKa-treibern, wird das ganze auf einmal extrem langsam. Ausserdem ist Flüssigkeit und Geschwindigkeit des Effekts stark vom Rechner selbst abhängig...Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus und
dann wieder einblendet
Grüße
auchZitat von @Snowman25:
> Zitat von @ChrFriedel:
> ----
> Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus
und
> dann wieder einblendet
Jetzt bin ich neidisch... Ich musste mir dafür extra 'n FadeIn-/FadeOut-Schnipsel schreiben, damit das klappt
(schleife mit opacity usw..). Problem dabei: Auf Rechnern mit schwacher GraKa bzw. ohne GraKa-treibern, wird das ganze auf
einmal extrem langsam. Ausserdem ist Flüssigkeit und Geschwindigkeit des Effekts stark vom Rechner selbst abhängig...
> Zitat von @ChrFriedel:
> ----
> Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam aus
und
> dann wieder einblendet
Jetzt bin ich neidisch... Ich musste mir dafür extra 'n FadeIn-/FadeOut-Schnipsel schreiben, damit das klappt
(schleife mit opacity usw..). Problem dabei: Auf Rechnern mit schwacher GraKa bzw. ohne GraKa-treibern, wird das ganze auf
einmal extrem langsam. Ausserdem ist Flüssigkeit und Geschwindigkeit des Effekts stark vom Rechner selbst abhängig...
Haste das wirklich geschrieben? Mach doch mal ne neue Anleitung. Das würde ich mir mal anschauen...
btw das Zitieren könnte besser sein oder ;)
Zitat von @ChrFriedel:
Haste das wirklich geschrieben? Mach doch mal ne neue Anleitung. Das würde ich mir mal anschauen...
Habs aber bloß in C#..Zitat von @Snowman25:
und
(schleife mit opacity usw..). Problem dabei: Auf Rechnern mit schwacher GraKa bzw. ohne GraKa-treibern, wird das ganze
aufZitat von @ChrFriedel:
Der Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam
ausDer Sleep nach der Msgbox ist, zumindest bei Windows 7 und 1000ms, ein netter optischer Effekt da die Msgbox so langsam
und
dann wieder einblendet
Jetzt bin ich neidisch... Ich musste mir dafür extra 'n FadeIn-/FadeOut-Schnipsel schreiben, damit das klappt(schleife mit opacity usw..). Problem dabei: Auf Rechnern mit schwacher GraKa bzw. ohne GraKa-treibern, wird das ganze
einmal extrem langsam. Ausserdem ist Flüssigkeit und Geschwindigkeit des Effekts stark vom Rechner selbst
abhängig...Haste das wirklich geschrieben? Mach doch mal ne neue Anleitung. Das würde ich mir mal anschauen...
Siehe hier:
private void fadein(object sender, EventArgs e) {
// als LOAD-Event der Form (bei Bedarf auch für Subforms und Dialoge)
this.Opacity = 0;
for (double i = 0; i < 100; i += 10) {
this.Opacity = i / 100;
this.Refresh();
}
this.Opacity = 1;
}
private void fadeout(object sender, EventArgs e) {
// als CLOSED-Event der Form (bei Bedarf auch für Subforms und Dialoge -> ohne Application.Exit)
for (double i = 100; i > -1; i -= 10) {
this.Opacity = i / 100;
this.Refresh();
}
Application.Exit();
}
btw das Zitieren könnte besser sein oder ;)
:-P
Achso alles klar. Ich dachte in VBScript ;)
Aber ne lustige Spielerei ist es. Und auch viel cooler als der "Effekt" in meinem VBS. Aber ich kann mir vorstellen was du mit den Performanceproblemen meinst . Liegt vermutlich an den Refreshs. Aber wie man das umgehen kann weiß ich leider auch nicht so aus dem Stehgreif.. vielleicht irgendwas mit Buffern... oder du versucht es mit nem Timer der alle 20ms feuert und die opacity verändert und sich bei 1 abschaltet. Könnte sein das du damit die Refreshs umgehen kannst... alles aber ohne Garantie ;)
Aber ne lustige Spielerei ist es. Und auch viel cooler als der "Effekt" in meinem VBS. Aber ich kann mir vorstellen was du mit den Performanceproblemen meinst . Liegt vermutlich an den Refreshs. Aber wie man das umgehen kann weiß ich leider auch nicht so aus dem Stehgreif.. vielleicht irgendwas mit Buffern... oder du versucht es mit nem Timer der alle 20ms feuert und die opacity verändert und sich bei 1 abschaltet. Könnte sein das du damit die Refreshs umgehen kannst... alles aber ohne Garantie ;)
Hab ich schon alles ausprobiert. Aber das einzige, das zuverlässig funktioniert ist nunmal das. Auf diesem Rechner läuft der Effekt verdammt flüssig ab (frisch compiliert). Auf dem Laptop meiner mum (auch kein schlechtes Teil, allerdings vista) dauert der Effekt fast ewig. Kann aber auch am zusammenspiel des Effektes mit Aero liegen..
Hast du auch mal den Info-Screen geöffnet? Da kommt das am besten rüber, finde ich.
Gruß
Snow
Hast du auch mal den Info-Screen geöffnet? Da kommt das am besten rüber, finde ich.
Gruß
Snow