Befehle nur an ein bestimmtes Fenster senden
-
Hallo zusammen.
ich brauche ein Programm oder DLL die sich an mehrer fenster hängt. die fenster sind alle gleich haben nur einen anderen namen.
Mein Programm soll so funktionieren, das ich es öffne auf neu drücke und dann den namen vom fenster eingebe, und dann soll alles was mein programm macht sich nur auf dieses fenster beziehen. zbs. bewege die mouse nach pixel 200,200 oder setze die größe des fensters auf 350, 350 pixel. und jedes mal wenn ich neu drücke möchte ich das mein programm sich an ein anderes hängt welchen namen ich im sage also multifunktional. das mal zur groben erläuterung.
was ich brauche ist aber der code der die bindung zu den fenstern macht. Kann mir da jemand helfen. Falls es einer schreiben möchte ich bezahle das gerne.
Vielen Dank
-
MJAEGER schrieb:
Hallo zusammen.
ich brauche ein Programm oder DLL die sich an mehrer fenster hängt. die fenster sind alle gleich haben nur einen anderen namen.
Mein Programm soll so funktionieren, das ich es öffne auf neu drücke und dann den namen vom fenster eingebe, und dann soll alles was mein programm macht sich nur auf dieses fenster beziehen. zbs. bewege die mouse nach pixel 200,200 oder setze die größe des fensters auf 350, 350 pixel. und jedes mal wenn ich neu drücke möchte ich das mein programm sich an ein anderes hängt welchen namen ich im sage also multifunktional. das mal zur groben erläuterung.
was ich brauche ist aber der code der die bindung zu den fenstern macht. Kann mir da jemand helfen. Falls es einer schreiben möchte ich bezahle das gerne.
Vielen Dank
das ist nur bedingt möglich. die fenster müssen für deine nachrichten vorgesehen sein, d.h. eine entsprechende WndProc haben. einfach so mal nen pixel reinzuschreiben macht keinen sinn, wenn der bei der nächsten fensterbewegung wieder verschwindet. größenänderungen mögen vllt. machbar sein, das genügt dir aber nicht, schätze ich mal.
-
nochmal ein wenig genauer.
eine nachrichten routine hat ja jedes fenster. nur muss halt gewährleistet sein, das die nachricht auch von der routine behandelt wird.was ich brauche ist aber der code der die bindung zu den fenstern macht.
kurz und bündig das fensterhandle...
das bekommst du unter anderem mit FindWindow(Ex)
mit diesem Handle kannst du zB. nachrichten via SendMessage an das jeweilige Fenster schicken. ob die nachrichten routine das dann verarbeitet steht auf einem anderen blatt.
die maus(cursor) position kannst du mit mouse_event zu jeglicher position auf dem desktop steuern.
mit SetWindowPos bzw. mit MoveWindow kannst du das jeweilige Fenster neu Positionieren bzw. von der größe her ändern.
-
Wow, schon mal vielen dank.
Meine Info waren zu wenig,also hier ein paar mehr.
ich möchte aus diesen fenstern via OCR text auslesen, den text verarbeite ich dann und danach soll die maus zurück in das fenster gehen und auf einen bestimmten button drücken. allerdings sollten sich die koordinaten wo die textfelder sind und wo der button ist immer auf das eine fenster beziehen, nicht auf den desktop, damit ich mehrere fenster bearbeiten kann und die nicht immer in der exact selben position (auf dem Bildschirm) liegen müssen.
Die FindWindow function schein schon ganz gut zu sein, kann ich den diese function auch so nutzen das ich sage vereinfacht:
gehe zu fenster xyz und drücke button x bei koordinaten 240,300
oder brauche ich dafür etwas anderes, geht also nur um die bindung an das fenster nicht um die bewegung der maus, die bekomme ich hin.Vielen Dank schon mal
-
allerdings sollten sich die koordinaten wo die textfelder sind und wo der button ist immer auf das eine fenster beziehen, nicht auf den desktop, damit ich mehrere fenster bearbeiten kann und die nicht immer in der exact selben position (auf dem Bildschirm) liegen müssen.
wo liegt das problem!!
du must das pferd von hinten aufzäumen.
was du als erstes brauchst sind die koordinaten des Buttons / Editfeldes ... innerhalb des fensters. das bekommst du zB. mit einem Spy. entweder du schreibst die koordinaten raus, halt ich jetzt nicht für gut. oder du besorgst dir darüber die CtrlId des Elementes. Mit der CtrlId und dem handle des Fensters kommst du mittels GetDlgItem an das jeweilige Handle des Ctrl's. Mit GetWindowRect kommst du dann an die Koordinaten des Ctrl's innerhalb des Bildschirms. Alternativ dazu gibt es noch GetClientRect, das gibt dir die Koordinaten des Ctrl's innerhalb des Fensters zurück.
wenn du GetClientRect verwendest, must du danach ClientToScreen verwenden um wieder auf die Bildschirmkoordinaten zu kommen.
Mit eben diesen koordinaten kannst du die maus/cursor bewegen, und einen klick auf dem Bildschirm ausführen. wenn unter dieser position halt ein button ist, klickst du auf den.kann ich den diese function auch so nutzen das ich sage vereinfacht:
gehe zu fenster xyz und drücke button x bei koordinaten 240,300jein...
mit dem Fenster handle in verbindung mit anderen funktionen in der richtigen reihenfolge ja.
-
Danke für die super antwort und den hinweiss auf die anderen functionen werde ich sicherlich alle brauchen.
Das Programm soll mehrer fenster bearbeiten ,also müsste ich mich doch erst an jedes fenster anddocken oder zumindest sagen bei welchen fenster er das tun soll, also nicht auf den ganzen Monitor bezogen sondern nur auf das eine fenster das er gerade bearbeitet.
Muss ich das mit FinWindow machen? oder lieber anders, (Einfachste variante wäre gut)
Vielen Dank das ihr so schnell und kompetent antwortet.
-
der mouse_event ist bildschirmbezogen, wenn du die maus auf eine bestimmte koordinate setzt, und sich darunter ein Button befindet und du im maus_event sagst, klick mir mit der linken maustaste auf die koordinate, dann wird der klick ausgeführt und von dem darunterliegenen button entgegengenommen.
Das Programm soll mehrer fenster bearbeiten ,also müsste ich mich doch erst an jedes fenster anddocken oder zumindest sagen bei welchen fenster er das tun soll
denke du willst einen namen in dein programm eingeben, und diese fenster soll dann behandelt werden. gibst du einen neuen namen ein verlierst du das handle auf das vorhergehende und alle eingaben beziehen sich auf das aktuelle fenster.
FindWindow gibt dir das Handle mit dem übergebenen namen. und über das handle kommst du an alles was du brauchst um deine gewünschten sachen (wie bislang beschrieben) auszuführen.