Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi sendmessage an ein Fremdprogramm löst dort kein Event aus (https://www.delphipraxis.net/135409-sendmessage-ein-fremdprogramm-loest-dort-kein-event-aus.html)

Periander 10. Jun 2009 12:49


sendmessage an ein Fremdprogramm löst dort kein Event aus
 
Hallo,

mein Problem ist folgendes; ich möchte in ein Editfeld eines anderen Programms schreiben.
Das klappt auch soweit, allerdings verarbeitet das fremde Programm diese Eingabe nicht so, als wenn ich den Text manuel eintragen würde.


Ich habe das ganze so versucht:
Delphi-Quellcode:
   s := 'random';
   For i := 1 to Length(s) do
   begin
   SendMessage(hwnded2, WM_CHAR, Word(s[i]), 0);
   end;
Habe das ganze auch mit WM_COPYDATA versucht, allerdings ohne Erfolg:

Delphi-Quellcode:
  var
  aCopyData: TCopyDataStruct;
  p: PChar;
Delphi-Quellcode:

  p := 'random';

  with aCopyData do begin
    dwData := 0;
    cbData := StrLen(p) + 1;
    lpData := p;
  end;

   SendMessage(hwnded2, WM_COPYDATA, Longint(Handle),
              Longint(@aCopyData));
   end;
Ich möchte den Tastendruck nicht über Keydown simulieren, sondern über Sendmessage senden. Kennt jemand einen Grund für mein Problem?

Bernhard Geyer 10. Jun 2009 12:50

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Zitat:

Zitat von Periander
Ich möchte den Tastendruck nicht über Keydown simulieren, sondern über Sendmessage senden. Kennt jemand einen Grund für mein Problem?

Ich tipp mal drauf das das Programm auf KeyDown-Messages die Abarbeitung anstößt.

Luckie 10. Jun 2009 12:51

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Zitat:

Zitat von Periander
mein Problem ist folgendes; ich möchte in ein Editfeld eines anderen Programms schreiben.
Das klappt auch soweit, allerdings verarbeitet das fremde Programm diese Eingabe nicht so, als wenn ich den Text manuel eintragen würde.

Was heißt das und was möchtest du erreichen?

Zitat:

Habe das ganze auch mit WM_COPYDATA versucht, allerdings ohne Erfolg:
Wenn der Empfänger die nachricht nicht verarbeitet, kann auch nichts passieren.

Periander 10. Jun 2009 12:54

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Periander
mein Problem ist folgendes; ich möchte in ein Editfeld eines anderen Programms schreiben.
Das klappt auch soweit, allerdings verarbeitet das fremde Programm diese Eingabe nicht so, als wenn ich den Text manuel eintragen würde.

Was heißt das und was möchtest du erreichen?

D.h. Das in dem Editfeld zwar die Eingabe "random" erscheint, aber nicht den gleichen effekt erzeugt, als wenn ich "random" reingeschrieben hätte.
Es "steht" nur da, ohne, dass das Programm merken würde, dass es eben da steht.


Hab es eben nochmal mit:

Delphi-Quellcode:
 
  for lCount := 1 To Length(AText) Do
  begin
    lScanCode := VkKeyScan(AText[lCount]);
    lWithShift := lScanCode and (1 shl 8) <> 0;
    PostMessage(hwnded2, WM_KeyDown, lScanCode, 0);
  end;
Probiert, hat aber auch nur in soweit geklappt, dass der Text dort stand, aber nicht verarbeitet wurde.

Luckie 10. Jun 2009 13:14

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Ich vermute das kein EM_CHANGE ausgelöst wird. Frag mich aber bitte nicht warum nicht.

Bernhard Geyer 10. Jun 2009 13:16

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Schau dir doch mal mit MS Spy an welche Events das Edit-Control bekommt und bilde dieses nach. Evtl. ist es nötig das das Control auch den Focus hat.

Periander 10. Jun 2009 13:18

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Zitat:

Zitat von Luckie
Ich vermute das kein EM_CHANGE ausgelöst wird. Frag mich aber bitte nicht warum nicht.

ja, sowas habe ich mir auch schon gedacht. Hat jemand ne Idee, wie ich sowas anderweitig noch provozieren kann?
Habs schon mit diversen klicks in und aus dem Editfeld versucht, vergeblich.

Bernhard Geyer 10. Jun 2009 13:29

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Welche Art von Programm ist es. Es gibt programm (Virenscanner, Firewall, ...) welche solche Art von Fernbedienung durch eigene Schutzmechanismen (z.B. Prüfung von KeyStates etc...) verhindern.

Tyrael Y. 10. Jun 2009 13:33

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Dein Ansatz mit WM_KEYDOWN ist vermutlich sogar richtig.

Kann aber sein, daß du danach auch noch ein WM_KEYUP benötigtst, da das Programm erst auf ein Keyup reagiert, was es bei dir nie bekommt.

Periander 10. Jun 2009 13:33

Re: sendmessage an ein Fremdprogramm löst dort kein Event au
 
Zitat:

Zitat von Bernhard Geyer
Welche Art von Programm ist es. Es gibt programm (Virenscanner, Firewall, ...) welche solche Art von Fernbedienung durch eigene Schutzmechanismen (z.B. Prüfung von KeyStates etc...) verhindern.

Keines dieser Programme. Das ist ein ganz normales Programm, denke nicht, dass dort jemand Schutzmechanismen eingebaut hat.

Zitat:

Schau dir doch mal mit MS Spy an welche Events das Edit-Control bekommt und bilde dieses nach. Evtl. ist es nötig das das Control auch den Focus hat.
Weiß nicht genau wie ich das anstellen soll.




Zitat:

Dein Ansatz mit WM_KEYDOWN ist vermutlich sogar richtig.

Kann aber sein, daß du danach auch noch ein WM_KEYUP benötigtst, da das Programm erst auf ein Keyup reagiert, was es bei dir nie bekommt.
Wenn ich ein WM_KEYUP einbaue, dann erscheint in dem Editfeld jeder Buchstabe doppelt, deswegen habe ich es rausgelassen und funktioniert hat es so auch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz