Forum: PC-Programmierung Tastenbetätigung an Windows übergeben.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tim G. (gerbil)


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?

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Such mal nach Autohotkey. Das kann noch sehr viel mehr.

Mit freundlichen Grüßen
Thorsten Ostermann

von Εrnst B. (ernst)


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}")

von Walter T. (nicolas)


Lesenswert?

Wenn der Ablauf mit Dateien zu tun hat, bietet es sich an, das Script in 
den SENDTO: - Ordner zu packen.

Damit kommen auch Laien eher klar als mit Tastenkombinationen.

von Tim G. (gerbil)


Lesenswert?

Öhm..hat sich erledigt..von den 3 Beiträgen habe ich nicht einen 
verstanden.
Bin halt zu alt.
Dann weiter Oldschool mit tasten drücken. Schade

von Hmmm (hmmm)


Lesenswert?

Tim G. schrieb:
> Öhm..hat sich erledigt..von den 3 Beiträgen habe ich nicht einen
> verstanden.
> Bin halt zu alt.

Guck Dir einfach AutoHotkey an, damit solltest Du das relativ einfach 
gelöst bekommen. Wikipedia hat sogar ein Beispiel, das nah an dem ist, 
was Du vorhast:

https://de.wikipedia.org/wiki/AutoHotkey#AutoHotkey-Programmbeispiele

von Frank O. (frank_o)


Lesenswert?

Hat Windows seit vielen Jahren an Bord. Nennt sich "Aufgabenplanung"
Man kann zwar (mache ich heute noch) mit Batch einiges machen und die 
Powershell würde noch mehr bringen, aber man kann das auch aufzeichnen 
und abspielen.

von Harald K. (kirnbichler)


Lesenswert?

Frank O. schrieb:
> Hat Windows seit vielen Jahren an Bord. Nennt sich "Aufgabenplanung"

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

von Frank O. (frank_o)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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.

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

von Harald K. (kirnbichler)


Lesenswert?

Joachim B. schrieb:
> wie hast du sichergestellt daß das richtige Fenster den Focus bekam?

Geeignete Software orientiert sich am Fensterklassennamen*, aber mir 
wäre wirklich neu, daß der Taskplaner auch nur irgendwas davon weiß.




*) den kann man z.B. mit Spy++ rausfinden: 
https://learn.microsoft.com/de-de/visualstudio/debugger/introducing-spy-increment?view=vs-2022

von Rene K. (xdraconix)


Lesenswert?

Joachim B. schrieb:
> wie hast du sichergestellt daß das richtige Fenster den Focus bekam?

Das was DU siehst ist nur ein Bruchteil von dem was dahinter steckt. 
Jedes Fenster / Programm hat eine eindeutige und wiederholende ID, 
danach richtet sich Windows, nicht nach dem sichtbaren "Fenster".

von Joachim B. (jar)


Lesenswert?

Rene K. schrieb:
> Jedes Fenster / Programm hat eine eindeutige und wiederholende ID,
> danach richtet sich Windows, nicht nach dem sichtbaren "Fenster".

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

von Manfred P. (pruckelfred)


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.

von Harald K. (kirnbichler)


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.

von Joachim B. (jar)


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]

von Frank O. (frank_o)


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.

von Hmmm (hmmm)


Lesenswert?

Frank O. schrieb:
> Früher konnte man die Aufgaben einfach aufzeichnen

Wäre mir neu. Du verwechselst das vermutlich mit irgendwelcher 
Fremdsoftware.

: Bearbeitet durch User
von Frank O. (frank_o)


Lesenswert?

Lange her. War bestimmt Windows 95.

von Hmmm (hmmm)


Lesenswert?

Frank O. schrieb:
> War bestimmt Windows 95.

Da hiess das "System Agent", war Bestandteil des optionalen Plus-Pakets 
und hat mehr oder weniger dasselbe getan wie heute der Task Scheduler.

Siehe z.B. https://slideplayer.com/slide/6241091/ (Seite 62)

von Frank O. (frank_o)


Lesenswert?

Mag sein, dass das im Plus-Paket war. Es hatte auf jeden Fall 
funktioniert.
Ich selbst hatte keine Verwendung dafür und hatte es nur aus Interesse 
ausprobiert.

von Hmmm (hmmm)


Lesenswert?

Frank O. schrieb:
> Mag sein, dass das im Plus-Paket war.

Wie gesagt, der System Agent konnte sowas auch nicht.

Aber wahrscheinlich warst Du noch weiter in der Vergangenheit, Windows 
3.1 hatte nämlich so ein Feature, das bloss mit dem Task Scheduler 
nichts zu tun hatte, nannte sich "Macro Recorder":

https://www.mjtnet.com/blog/2014/07/03/remember-the-macro-recorder-in-windows-3-1/

von Frank O. (frank_o)


Lesenswert?

Mag sein. Als mein Sohn starb, da hatte ich einen Gedächtnisverlust. Das 
Meiste ist wieder gekommen, nur das Zeitgefühl nicht mehr so richtig.

von Flunder (flunder)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.