prozessübergreifende (GUI-)Programm-Steuerung



  • Hallo Community,

    habe ein bestehendes Programm (besitze dazu keinen Quellcode - also nicht änderbar), in welchem ich von einen anderem Programm aus (prozessübergreifend) diverse Controls (Text-Boxen) vorbelegen und Button-Klicks simulieren soll (um Abläufe zu automatisieren, ohne dass der Benutzer manuell das jeweilige Programm aufrufen/bedienen muss).
    Meine Frage:
    Ist dies generell möglich? Beide Prozesse laufen natürlich unter dem selben Benutzer.
    Ich weiß, dass man mit Programmen wie Spy++ (Visual Studio Tool) die ID's von Controls aus GUIs anderer Prozesse auslesen kann, habe jedoch momentan nicht wirklich eine Idee, wie man jetzt z.B. den Textinhalt eines Controls aus einem anderen Prozess setzen kann.

    Hat vielleicht jemand ein entsprechendes Tutorial/Code-Schnipsel zur Hand?

    Danke für eure Hilfe,

    martin



  • gar nicht so ohne weiteres. weiß grad ned ob WM_SETTEXT prozessübergreifend arbeitet oder nur WM_GETTEXT. aber sonst gar nicht.



  • Schau dir mal AutoIt an.



  • Für die gewünschte prozessübergreifende Kommunikation brauchst du notwendig die Fenster-Handles des Zielprozesses (Main, Dialoge, etc.) und für Controls deren IDs. Dann kannst du mit SendMessage beliebige Nachrichten schicken. Alle anderen WinApi-Funktionen, die ein Fenster-Handle als Parameter haben, gehen auch. Windows ist es nämlich egal, ob ein HWND im eigenen oder in einem fremden Prozess läuft. Du brauchst wahrscheinlich die beiden WinApi-Funktionen EnumWindows und GetWindowThreadProcessId, um an alles gewünschte heran zu kommen. Viel Glück!



  • berniebutt schrieb:

    Für die gewünschte prozessübergreifende Kommunikation brauchst du notwendig die Fenster-Handles des Zielprozesses (Main, Dialoge, etc.) und für Controls deren IDs. Dann kannst du mit SendMessage beliebige Nachrichten schicken. Alle anderen WinApi-Funktionen, die ein Fenster-Handle als Parameter haben, gehen auch. Windows ist es nämlich egal, ob ein HWND im eigenen oder in einem fremden Prozess läuft. Du brauchst wahrscheinlich die beiden WinApi-Funktionen EnumWindows und GetWindowThreadProcessId, um an alles gewünschte heran zu kommen. Viel Glück!

    grober schwachsinn.



  • hack0r schrieb:

    grober schwachsinn.

    Wieso grober Schwachsinn, wenn es läuft? Ich habe bei einer ähnlichen Aufgabe das mit Erfolg so gemacht. Es bleibt aber die Frage, ob man solche Dinge überhaupt machen soll. Man kann damit auch sehr viel Unfug anrichten! Bisher hat kein Windows-System das verhindert. Man sollte schon wissen, was man tut. :p



  • berniebutt schrieb:

    hack0r schrieb:

    grober schwachsinn.

    Wieso grober Schwachsinn, wenn es läuft? Ich habe bei einer ähnlichen Aufgabe das mit Erfolg so gemacht. Es bleibt aber die Frage, ob man solche Dinge überhaupt machen soll. Man kann damit auch sehr viel Unfug anrichten! Bisher hat kein Windows-System das verhindert. Man sollte schon wissen, was man tut. :p

    bei nachrichten die zeiger beinhalten klappt das wohl kaum, du holzbirne, außer wind00f handhabt das wie in spezialfällen WM_GETTEXT etc.



  • holzbirne? geh mal in den kindergarten. dort lernt man sowas wie umgangsformen. könnte gut für dich sein! knecht ruprecht hat deine antworten gelesen.



  • knecht ruprecht schrieb:

    holzbirne? geh mal in den kindergarten. dort lernt man sowas wie umgangsformen. könnte gut für dich sein! knecht ruprecht hat deine antworten gelesen.

    weisst du überhaupt wer ich bin? würde mich an deiner stelle erstmal informieren bevor ich hier so auf dicke hose mache.



  • Es sind eindeutig wieder Ferien... seufz...



  • hätte eigentlich nicht gedacht, dass meine frage, in so einer primitiven diskussion endet.. 🙄
    trotzdem danke für eure tipps, habe das ganze jetzt schnell und unkompliziert mit einem simplen AutoIt-Skript (~10 Zeilen) gelöst.

    schöne feiertage,

    martin


Anmelden zum Antworten