SendMessage() zu externem Programm funktioniert nicht
-
hi,
ich öffne mir über ShellExecuteEx() eine Worddatei in Word 2003. Über EnumWindows() hole ich mir den HWND zu diesem geöffneten Word-Programm in dem meine Datei aus dem ShellExecute geöffnet wurde.
Diesem schicke ich dann ein SendMessage(), damit sich das fenster verkleinert, es soll nämlich nicht maximiert dargestellt werdne, sondern nur 800,600.
Nur leider reagiert das Programm auf mein SendMessage() nicht und ich verstehe auch nicht warum. Hier der Code, kann mir wer sagen, was ich falsch mache?
if (g_hwnd != NULL) SendMessage(g_hwnd, WM_SIZE, NULL, MAKELPARAM(800,600));SendMessage liefert 0 zurück, laut Doku beduetet das, dass der Befehl empfangen wurde, nur das Fenster reagiert nicht darauf :/.
-
MSDN zu WM_SIZE (http://msdn.microsoft.com/en-us/library/aa926857.aspx):
This message is sent to a window after its size has changed.
-> WM_SIZE wird geschickt nachdem das Fenster verkleinert wurde.
Probiere mal den Befehl SetWindowPos() http://msdn.microsoft.com/en-us/library/ms633545%28VS.85%29.aspx
-
Ein SendMessage an ein externes Programm kann nur funktionieren, wenn dort in der CALLBACK-Funktion ein entsprechender case-Zweig vorgesehen ist und darauf reagiert wird. Anderenfalls läuft jede Mitteilung ins Leere. Schicke probeweise mal ein WM_DESTROY - das ist überall vorgesehen. Alles andere muss man bei fremden Programmen ausprobieren, erzwingen kann man da nichts.
-
@berniebutt: In diesem Fall würde nicht mal das richtige passieren, wenn ein WM_SIZE Handler vorliegt. WM_SIZE veranlast nichts, es ist eine Benachrichtigung!
http://blog.m-ri.de/index.php/2007/12/24/die-unsitte-windows-interne-nachrichten-zu-versenden/
-
Fazit: Versuche nicht ungefragt in fremden Programmen herumzupfuschen. Du selbst würdest das bei deinen eigenen Programmen auch nicht wollen!