Win batch soll programm starten und angeforderte Eingabe automatisch beantworten

rc1

Newbie
Registriert
Aug. 2021
Beiträge
6
Hallo, ich suche schon seit Tagen ohne weiter zu kommen.
Problem: Ich starte ein Scanprogramm mit einer windows-batch.Datei, die ich über Autostart starte.
Das Scanprogramm gibt eine Bildschirm-Meldung aus, die eine Eingabe "ok" erwartet, d. h. mein Batch bleibt an der Stelle stehen.
Ich würde nun gerne die gewünschte Eingabe automatisch beantworten, damit das Programm weiter läuft, dei Bilschirm-Meldung wieder geschlossen und das Programm zu Ende läuft.
Hört sich eigentlich simpel an, aber ich weiß nicht, wie ich den Parameter "ok" eingeben soll.
Mein simpler Batch:
cd C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\
start CNMNSST2.exe
--> dann kommt als Antwort:
1628929845294.png

Und diese Antwort hätte ich gerne mit "ok" beantwortet.
Im Voraus danke für jeden Tipp.
 
Es gibt Automatisierungstools für sowas (Stichwort RPA), ich kenne kein Einziges, weil ich damit nie in Berührung kam, aber sicher wird dir bald einer welche nennen.
 
Zuletzt bearbeitet: (Start Befehl ist doch asynchron https://ss64.com/nt/start.html)
Code:
@if (@CodeSection == @Batch) @then

@echo off

    set SendKeys=CScript //nologo //E:JScript "%~F0"

        timeout /t 3 /nobreak >nul

    %SendKeys% {Enter}

@end

var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.SendKeys(WScript.Arguments(0));

geht im batch. das schickt die eingabetaste.
du musst nur sicherstellen, im zweifel per anpassung des timeouts, dass es in dem moment abgesetzt wird, wo das auswahlfenster im vordergrund ist.

ja und je nachdem was dein script sonst so alles macht, musst du diesen part vorher abzweigen. also als bat aus der bat aufrufen...
 
Zuletzt bearbeitet:
Wenn beim Aufruf der Datei das OK vorgewählt ist,kannst du es mit
einem VBS-Script versuchen. Erstelle z.B. die Datei >> Scanner.vbs

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\CNMNSST2.exe"

WScript.Sleep 2000


WshShell.SendKeys " "


Wscript.quit
 
Danke für die Tipps, das mit autoit werde ich demnächst probieren, klingt einfach.

Das mit dem Code von Redundanz checke ich nicht so richtig. Frage: wenn ich in meiner Batchdatei wirklich nur das eine Scanprogramm starten möchte, würde mein Batch dann so aussehen?

cd C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\
start CNMNSST2.exe

@if (@CodeSection == @batch) @then

@Echo off

set SendKeys=CScript //nologo //E:JScript "%~F0"

timeout /t 3 /nobreak >nul

%SendKeys% {Enter}

@End

var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.SendKeys(WScript.Arguments(0));
 
Hier mit Autoit. Dort ist beschrieben, wie Fenster ausgelesen und auf bestimmte Buttons geklickt werden.

Um jetzt einen Dialog dauerhaft abzufragen bzw. darauf zu warten & den Button zu klicken: Skript in einen Loop stecken.
Als Beispiel der Cancel-Button von Putty. Sobald das Putty-Fenster kommt, wird auf Cancel gedrückt (in Dauerschleife):
Code:
While 1

WinWait("PuTTY Configuration", "Specify the")
WinWaitActive("PuTTY Configuration", "Specify the")
ControlClick("PuTTY Configuration", "Specify the", "[CLASS:Button; INSTANCE:2]")

WEnd
 
Zuletzt bearbeitet:
rc1 schrieb:
Danke für die Tipps, das mit autoit werde ich demnächst probieren, klingt einfach.

Das mit dem Code von Redundanz checke ich nicht so richtig. Frage: wenn ich in meiner Batchdatei wirklich nur das eine Scanprogramm starten möchte, würde mein Batch dann so aussehen?

bei der, ich nenne sie mal "start_canon.bat" den cd command kannst du weglassen, das programm einfach direkt aufrufen. dann erstellst du noch eine "enter.bat" z.b. auch im canon-verzeichnis mit inhalt siehe unten.

start_canon.bat

Code:
start "" "C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\CNMNSST2.exe"
start "" "C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\enter.bat"

enter.bat
Code:
@if (@CodeSection == @Batch) @then
@echo off
    set SendKeys=CScript //nologo //E:JScript "%~F0"
        timeout /t 3 /nobreak >nul
    %SendKeys% {Enter}
@end
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));
exit

habe selber das canon tool nicht, aber habe das gerade bei mir mit dem starten von einem programm namens "hwinfo" getestet, das hat auch ein dialogfenster mit bestätigung am start. klappt 1a.

so brauchst du kein 3rd party tool

nachtrag: den wert "3" (sekunden) in der timeoutzeile natürlich mindestens auf die sekunden einstellen, wie lange es dauert bis nach programmstart das dialogfenster erscheint...
 
  • Gefällt mir
Reaktionen: Gee858eeG
Danke für den Tipp, hat leider nicht den gewünschten Effekt gebracht.
- Wenn ich den Batch starte kommt ganz kurz der Kommandobildschirm MIT der Ausgabe des
Scanprogramms
1628953809918.png

- danach kommt für 3 Sekunden der Kommandobildschirm alleine
1628953885642.png

- und danach kommt (leider) wieder die Ausgabe des Scanprogramms
1628953978213.png

das ich dann wieder mit einer Eingabe beenden muss.
Schade.
Die Verlängerung der Wartezeit bringt keine Veränderung des Effekts.
 
sieht komischweise danach aus, als würde das canon network scanner fenster den fokus verloren haben und der enter-befehl somit an das cmd fenster gesendet werden.
gute frage warum das so ist.

ok in dem fall... könnte trick 17 noch abhilfe schaffen ... :) und die beiden start aufrufe in der haupt-batch einfach zeilenvertauschen.
macht ehrlich gesagt vom fokusverhalten auch mehr sinn. aber mir fiel es nicht auf, weil es bei mir auch so ging...
 
Zuletzt bearbeitet:
Leider hilft auch Trick 17 nicht. Keine Veränderung im Verhalten.
Werd mich dann eben mal in autoit einlesen. Kann ja auch nicht schaden, wenn ich noch was lerne.
 
schade ja. viel glück mit autoit
 
hybridlite schrieb:
Wenn beim Aufruf der Datei das OK vorgewählt ist,kannst du es mit
einem VBS-Script versuchen. Erstelle z.B. die Datei >> Scanner.vbs

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\CNMNSST2.exe"

WScript.Sleep 2000


WshShell.SendKeys " "


Wscript.quit
Ergänzung ()

Hallo Hybrid, sorry bin erst jetzt dazu gekommen, den Tipp mit VBS-Script auszuprobieren.
Leider kommt bei mir bei Ausführung des Scripts die Meldung:
1629021919081.png

obwohl der Pfad korrekt ist und die Datei existiert.
1629022008978.png

Fehlt vielleicht noch was in dem Script?
 
Teste mal beim Pfad ..........

WshShell.Run """C:\Program Files (x86)\Canon\IJ Network Scanner Selector EX2\CNMNSST2.exe"""

Vorher/nacher 3 Anführungszeichen.
 
Super, vielen Dank, das hat funktioniert!!
(Jetzt kann ich mein AutoIt-Studium wieder etwas langsamer angehen lassen).
Ich hab den Script im Autostart eingefügt, alles funktioniert.

Eine kleine Anmerkung (aber damit kann ich leben):
Bei der Ausführung des Scanner-Programms per Script wird ein Ton ausgegeben (ähnlich dem Knipseton beim Fotografieren). Wenn ich das Scannerprogramm direkt, d. h. ohne Script starte, kommt kein Ton.
Liegt das am Script oder meinem Laptop?
 
Zurück
Oben