SendMessage und SetActiveWindow
-
Hallo VirtualVoid,
mit WM_SETTEXT kann ich den Titel vom Winword-Fester ändern und mit WM_CLOSE das Winword-Fenster schliessen und das funzt auch bei mir ohne Probleme. Darum verstehe ich erst recht nicht warum ich keine Zeichen(a-z, A-Z, Steuerzeichen etc.) mit WM_KEYDOWN, WM_CHAR oder WM_KEYUP an das Fenster selbst (also wo der Cursor aufblinkt) senden kann? Auch mit SendMessageW/SendMessageA hab ich es schon probiert aber hat auch nix gebracht. Hat keiner mal ein funktionierendes Beispiel parat, kann mir fast nicht forstellen dass noch niemand einen Text bzw. einen Tastendruck an ein Fenster wie Winword oder Notepad senden wollten. Wie schon mal geschrieben habe ich WinXP Prof und VisualC++2008 im Einsatz.
Danke und Gruss, rommi
-
Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi rommi,
habe mir gerade noch einmal deinen Code angesehen. SendMessage() geht wohl an das falsche Fenster.
FindWindow() liefert dir das das Handle des Rahmenfensters von Notepad bzw. Winword. Die Textanzeige innerhalb dieses Rahmens ist vermutlich ein untergeordnetes Control (child window.)
Mit dem Tool Spy++ kannst du dir ansehen, wie die Fensterhierarchie der Zielanwendung aufgebaut ist. Das Fensterhandle, daß du für SendMessage() benötigst, kannst du dir dann über den ID oder Klassennamen heraussuchen.
Gruß, VV

-
Wenn man an einen fremden Prozess (hier Notepad) mit SendMessage etwas senden will, muss nicht nur das genaue Zielfenster kennen. Darüberhinaus muss man auch wissen, welche Nachrichten die Prozedur dieses Zielfensters verarbeitet. Anderenfalls passiert nichts bzw. wird von Windows geschluckt. Da hilft nur probieren!
-
Man kann Tastatureingaben nicht mit SendMessage simulieren.
http://blog.m-ri.de/index.php/2007/12/27/die-unsitte-tastatureingaben-mit-wm_keydown-nachrichten-zu-simulieren/
-
Hallo VirtualVoid und natürlich alle Anderen,
das war die Lösung. Das wimmelt ja nur so von Fenster mit verschiedenen Namen. Mir is jetzt echt schlecht. Ich hab mich wohl von SendInput und keybd_event ein bisschen beeinflussen lassen. Schliesslich ist es da schitegal wie das Fenster heisst hauptsache es hat den Fokus und schon kannste Tastendrücke senden bis dir schlecht wird. Hmm das muss ich mir noch genauer überlegen ob SendMessage überhaupt für meine Zwecke das Richtige ist. Zumindest arbeitet es auch bei einer gesperrten Maus und Tastatur im Hintergrund (so wie ich es eigentlich wollte). Aber is halt ganz schön aufwendig die ganzen Frames namentlich ausfindig zu machen. Schliesslich will ich ja nicht immer nur an Word und Notepad Tastatur-Inputs senden.
Auf jeden Fall erstmal grossen Dank für eure Hilfe

Gruss, rommi
-
Ach ja hätt ich beinahe vergessen! Schönen Dank an den Administrator der meinen verirrten Beitrag ins richtige Forum verschoben hat!!

-
Hallo Martin Richter,
der Autor dieser Seite schlägt vor SendInput und keybd_event zuverwenden. Das funzt eben nicht bei einer gesperrten Tastatur darum suche ich eben ne Alternative. Aber dass habe ich doch alles geschrieben...Gruss, rommi
-
Hi rommi (etc.),
wenn ich mich noch mal zu Wort melden darf...der von Martin Richter verlinkte Text faßt die Sache ja gut zusammen. Es ist natürlich "unzulässig" (im Sinne einer ordentlichen Anwendungsentwicklung), fremde Anwendungen mit simulierten Ereignissen manipulieren zu wollen. Gesetzlich verboten ist es aber nicht, und wenn du Notepad oder Word mal abschießt, ist das ja auch nicht sooo schlimm. Probieren geht über studieren...
Die Makrorekorder, die ich bisher kannte, nehmen *keine* Tastatur- oder Maussperre vor und weisen in der Doku auch darauf hin, daß man während des Makroablaufs besser die Hände vom Gerät läßt. Bei mir hat keybd_event auch immer gut funktioniert. Vielleicht solltest du also ohne Sperre arbeiten.
Word läßt sich übrigens auch über eine eigene Programmierschnittstelle fernsteuern (falls du das vielleicht nicht wissen solltest.)
Gruß, VV

-
Hi VirtualVoid
Ich möchte nur meine Anwendungen und Arbeitsabläufe auf meinem igenen PC so steuern können wie ich mir dass eben vorstellen (is doch wohl nicht verboten!!). Nicht mehr und nicht weniger. Die handelsüblichen Recorder sind nicht schlecht aber oft nicht mit all den Funktionen ausgestattet die ich wiederum haben möchte. Also möcht ich mir selbst was basteln dass ich auch selbst jederzeit ausbauen oder ändern kann. Is doch n frommer Wunsch, oder?
Ein Problem (genauso wie bei den Recordern) dabei ist eben dass ich auf meinem PC eigentlich schon weiter arbeiten will während mein Programm im Hintergrund (bitte nicht gleich wieder was böses denken) läuft. Erst bei bestimmten Ereignissen sollen Tastatur und Maus z.B. kurzfristig gesperrt werden damit ich den Ablauf nicht durch irgendwelche Tastatur und Mauseingaben störe und evtl. Ereignisse auslöse dich ich nicht haben möchte (sowie bei vielen Recordern). Natürlich könnte ich meine Anwendung gleich auf einem parallel installierten virtuellen Betriebssystem (VMware etc.) ablaufen lassen aber dass möchte ich momentan noch umgehen. Ich denke ich muss mich mal mit dem Thema "Interrupts" auseinander setzen.. Vieleicht komm ich da weiter

Huch, is ja schon wieder 1Uhr Nachts! Ich geh jetzt wohin, Gruss rommi