Tastenbetätigung an Windows übergeben.

OP #7756164
Lesenswert?

Ich tüftel gerade an einer Batchdatei mit der ich einen bestimmten Ablauf automatisieren möchte.

Es soll ein bestimmtes Programm aufgerufen werden(erledigt). Da sollen "EM"+Enter und PM+Enter im aktiven Fenster übergeben werden.

Gibt es einen Batch Befehl für so etwas?

#7756195
Lesenswert?

Mit Batch (also dem DOS-Urgestein von 1800irgendwas) schaut das schlecht aus, aber Power-Shell müsste gehen.

In etwa (Nur als Anregung zum Dokumentation-Lesen und weitersuchen)

1
$notepad = Start-Process notepad.exe -PassThru
2
# Wait ..
3
Start-Sleep -Seconds 2
4

5
Add-Type -AssemblyName UIAutomationClient
6
$ws = New-Object -ComObject wscript.shell
7
$ws.AppActivate($notepad.Id)
8

9
$ws.SendKeys("Hello, world!{ENTER}")
#7756577
Lesenswert?

Hmmm schrieb:

Guck Dir einfach AutoHotkey an, damit solltest Du das relativ einfach gelöst bekommen.

Ich bin Freund von AutoIT: https://www.autoitscript.com/site/autoit/ Damit kann man sogar komplette Programme mit Grafikoberfläche bauen.

Joachim B. schrieb:

Frank O. schrieb:

Harald K. schrieb:

Wie lässt Du die Bedienelemente in einer Programmoberfläche bedienen?

Das habe ich schon lange nicht mehr gemacht. Früher hat das alles aufgezeichnet und man konnte das zu bestimmten Zeiten ablaufen lassen.

Die Windows-Aufgabenplanung konnte noch nie Eingaben aufzeichnen. Das geht mit einem Tool von AutoIT, wobei man dessen Ergebnis auch nacharbeiten muß.

wie hast du sichergestellt daß das richtige Fenster den Focus bekam?

Das ist lustig, wenn die Maus über den Bildschirm läuft und irgendwas anklickt, was gerade im Vordergrund ist. Mit AutoIT frage ich "Winactive" ab bzw. hole die Anwendung nach oben. Automatisierte Programmbedienung ist nett, aber, es zuverlässig zu machen, bereitet Aufwand.

#7756589
Lesenswert?

Joachim B. schrieb:

mir war aber nie klar wie man aus der dos shell diese ID bekommt und welches Fenster gerade aktiv ist.

Jedes Windows-Programm darf Win32-API-Funktionen aufrufen, und beispielsweise alle Fensterklassennamen laufender Prozesse mit Fenstern auflisten lassen. Zusätzlich lassen sich Fensterhandles bestimmen, und an die können Nachrichten versendet werden.

Aus dem, was Du "dos shell" nennst, heraus geht das jedoch nicht mit Bordmitteln.

Programme wie "AutoIt" aber machen genau das.

Das von mir vorhin erst verlinkte Spy++ kann einem diese Informationen anzeigen, wenn man sich dafür interessiert.

Bei derartigen Aufgaben besonders widerspenstig sind Programme, die ihren eigene GUI-Renderer verwenden und nicht auf dem Windows-Fensterunterbau aufbauen. Diese rendern ihre GUI in eine große Bitmap und lassen Windows diese anzeigen. Da gibt es dann für Bedienelemente innerhalb der Anwendung keinerlei Informationen mehr, während ein herkömmliches Windows-Programm sich auf jeden einzelnen Button, jedes Icon und jede Textzeile hin sezieren und gezielt ansteuern lässt.

#7756601
Lesenswert?

Harald K. schrieb:

Bei derartigen Aufgaben besonders widerspenstig sind Programme, die ihren eigene GUI-Renderer verwenden und nicht auf dem Windows-Fensterunterbau aufbauen. Diese rendern ihre GUI in eine große Bitmap und lassen Windows diese anzeigen. Da gibt es dann für Bedienelemente innerhalb der Anwendung keinerlei Informationen mehr,

ich denke das ist mir auch bei einigen DOS Spielen begegnet!

Manfred P. schrieb:

Das ist lustig, wenn die Maus über den Bildschirm läuft und irgendwas anklickt, was gerade im Vordergrund ist.

eben drum meine Frage nach welches Fenster ist vorne

Rene K. schrieb:

Das was DU siehst ist nur ein Bruchteil von dem was dahinter steckt.

ach [/Loriot]

#7756615
Lesenswert?

Joachim B. schrieb:

wie hast du sichergestellt daß das richtige Fenster den Focus bekam?

Ich habe mir das gerade angeschaut. Das ist wohl deutlich verändert. Früher konnte man die Aufgaben einfach aufzeichnen, in dem man auf "Aufnahme" drückte, dann alle Aktionen ausführte und am Ende auf Stopp drückte und das ganze speicherte. Dann konnte man das zu beliebigen Zeiten ausführen. Gibt es in dieser Form wohl nicht mehr. Aber ich denke, wenn man sich mit beschäftigen würde, geht das sicher auch noch. Trotzdem würde ich das auch lieber über eine Batch-Datei oder über einen Skript machen, denn das ist dann auch erstmal mit einer Einarbeitungszeit verbunden.

#7756880
Lesenswert?

Also bei Win3.1 war der Makrorekorder noch so dabei. Ich meine mich erinnern zu können, dass wir damals wilde Mauszeigerfahrten aufgenommen haben und dann irgendeinen Hotkey zum Abspielen festgelegt haben, um andere Benutzer zu verwirren.

Wenn es ein Kommandozeilenprogramm ist sollte auch

1
echo EM | "C:\Program Files\hurz.exe"

funktionieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren