Forum: PC-Programmierung Input automatisieren ohne Rechner zu blockieren


von Effizienz-Detektor (Gast)


Lesenswert?

Guten Tag,
ich habe ein paar lästige Routine-Aufgaben in einem Programm ohne 
Skriptunterstützung mithilfe von AutoIt automatisiert (klick dort, gibt 
das ein, drück Enter, usw.)
Das Problem ist, dass ,solange das AutoIt-Skript läuft, ich den Rechner 
nicht anderweitig verwenden kann.
Nun wollte ich fragen, ob es eine Möglichkeit gibt (z. B. Win32-API), 
entsprechende Nachrichten an das Fenster zu schicken, so dass ich den 
Rechner trotzdem noch anderweitig nutzen kann.
Ich kann C# und weiß auch wie man Win32-Dlls einbindet, da ich das mal 
für Highperformance-Counter gebraucht habe, sonst hatte ich bisher mit 
Win32 nichts am Hut und vielleicht kann mir hier ein Profi die Richtung 
weisen. Wenn es was anderes gibt was folgende Anforderungen erfüllt, 
gerne:

- (Links-)Klick an bestimmte Stelle im Fenster, relativ zur Fenster 
Position wäre perfekt (zur Ecke links/oben)
- Tastatureingaben schicken: <Taste>, CTRL+<Taste>, ALT+<Taste>
- optional: Funktioniert auch wenn Fenster überlagert/minimiert

Das würde mir schon reichen. Die relevante Prozess-ID bekomme ich schon 
mit C# Bordmitteln raus.

von Minimalist (Gast)


Lesenswert?

Kann AutoIt3 normalerweise mit Boardmitteln.
ControlSend() und ControlClick(). Die sind aber manchmal was zickig.

von Noch eine Meinung (Gast)


Lesenswert?

Wenn dein Rechner genug Speicher hat - das ganze System innerhalb einer 
virtuellen Maschine laufen lassen.

von Effizienz-Detektor (Gast)


Lesenswert?

Minimalist schrieb:
> Kann AutoIt3 normalerweise mit Boardmitteln.
> ControlSend() und ControlClick(). Die sind aber manchmal was zickig.

Danke, wenn ich das richtig lese muss ich dazu das Control lokalisieren, 
richtig? Gibt es Tools um mir den UI-Tree / das Control geben zu lassen?

Noch eine Meinung schrieb:
> Wenn dein Rechner genug Speicher hat - das ganze System innerhalb einer
> virtuellen Maschine laufen lassen.

Das wäre meine Lösung der Wahl gewesen, leider kann ich hier keine 
VM-Software installieren.

von тролхантэр (Gast)


Lesenswert?

Man sollte heute nicht mehr blockierend programmieren. Das war vor 30 
Jahren.

von Jim M. (turboj)


Lesenswert?

тролхантэр schrieb:
> Man sollte heute nicht mehr blockierend programmieren. Das war vor 30
> Jahren.

Verstehendes Lesen ist heute wohl nicht mehr "in". Komplett falsche 
Baustelle.

Es geht bei AutoIT um das Problem das mit Maus- und Tastatureingaben ein 
Programm "ferngesteuert" wird.

Dabei würden "echte" Eingaben des $Lusers extremst stören - und genau 
das verhindert auch das gleichzeitige Arbeiten.

von test (Gast)


Lesenswert?

Effizienz-Detektor schrieb:
> Nun wollte ich fragen, ob es eine Möglichkeit gibt (z. B. Win32-API),
> entsprechende Nachrichten an das Fenster zu schicken, so dass ich den
> Rechner trotzdem noch anderweitig nutzen kann.

Ja. Hier steht alles 
https://docs.microsoft.com/de-de/windows/win32/apiindex/api-index-portal

Fenstehandle holen (anhand Pfad/Dateiname des gewünschten Programms), 
prüfen ob das Programm läuft und dann die Nachrichten ans gewünschte 
Fenster/Fensterelement schicken. Viel Spaß ;-)

von c-hater (Gast)


Lesenswert?

Effizienz-Detektor schrieb:

> Danke, wenn ich das richtig lese muss ich dazu das Control lokalisieren,
> richtig?

Jepp.

> Gibt es Tools um mir den UI-Tree / das Control geben zu lassen?

Jepp. In früheren Versionen des VisualStudio gab es dafür z.B. Spy++, 
bei Delphi gab es ein ähnliches Tool namens WinSight32.

Wenn ich mich aber noch so halbwegs richtig erinnere, gibt (oder gab) es 
im Lieferumfang von AutoIt ein zu den genannten Tools vergleichbares 
Werkzeug. Sicher bin ich mir nach all den Jahren zwar nicht mehr, aber 
es ergibt Sinn. Weil AutoIt sowieso alle für ein solches Tool nötigen 
Funktionen können muss.

Wenn man's sowieso schon implementiert hat, kann man's auch mit 
ausliefern...

Also vielleicht mal die Doku von AutoIt lesen?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Wenn die Systemversion es zulässt, oder man RDP-Wrapper installiert, 
eine zweite Session aufmachen und das Skript starten. Dann Session 
trennen (nicht abmelden) bzw. Benutzer wechseln und in der anderen 
Session arbeiten ...

Dann braucht man (im Gegensatz zu einer VM) keine zwei vollständigen 
Systeme.

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.