mikrocontroller.net

Forum: PC-Programmierung Input automatisieren ohne Rechner zu blockieren


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.
Autor: Effizienz-Detektor (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Minimalist (Gast)
Datum:

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

Autor: Noch eine Meinung (Gast)
Datum:

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

Autor: Effizienz-Detektor (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: тролхантэр (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Man sollte heute nicht mehr blockierend programmieren. Das war vor 30 
Jahren.

Autor: Jim M. (turboj)
Datum:

Bewertung
2 lesenswert
nicht 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.

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß ;-)

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank E. (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.