Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Text an ein anderes Fenster schicken. (https://www.delphipraxis.net/30488-text-ein-anderes-fenster-schicken.html)

glb 25. Sep 2004 14:43


Text an ein anderes Fenster schicken.
 
Hallo Leute,

gibt es eine Möglichkeit Text an eine andere Anwendung(z. Bsp Notepad) zu schicken?
Ich habe bereits folgende Möglichkeiten probiert:
Delphi-Quellcode:
SendMessage(Wnd, WM_Settext,0,Integer(Pchar(myString)));
Das tut soweit aber leider wird bereits vorhandener Text gelöscht :(

dann habe ich noch
Delphi-Quellcode:
edit1.SelectAll;
edit1.CopyToClipboard;
PostMessage(Wnd, wm_Paste, 0,0);
probiert. Das tut ... aber nicht in allen Anwendungen und der vorherige Inhalt der Zwischenablage wird zerstört.

als letztes habe ich

Delphi-Quellcode:
PostMessage(Wnd, wm_KeyDown, ORD('A'),0);
probiert. Das hat in allen Anwendungen funktioniert. Aber leider kann man ja immer nur ein
Zeichen schicken ... :cry:
Kennst ihr eine Möglichkeit Strings zu schicken oder habt evtl eine Funktion, welche einen
PostMessage(Wnd, wm_KeyDown, ORD('A'),0) kapselt und der man einen String mitgeben kann? :?:

Danke für die Mühe!

Luckie 25. Sep 2004 14:47

Re: Text an ein anderes Fenster schicken.
 
Hol dir erst den Text mit MSDN-Library durchsuchenwm_gettexx, häng deinen an und dann schickst du ihn wieder mit MSDN-Library durchsuchenwm_settetxt an das Edit.

Dax 25. Sep 2004 14:58

Re: Text an ein anderes Fenster schicken.
 
Such einfach mal überall (in der DP, auf deiner Platte, Google, ...) nach SendKeys. Bei Delphi6 ist so eine Unit dabei, und ich glaube, dass wir dieses Thema in der DP schonmal hatten... :gruebel: Hier im Forum suchenSendKeys

glb 25. Sep 2004 15:00

Re: Text an ein anderes Fenster schicken.
 
Hi,

danke für die schnelle Antwort.

Ich möchte den Text aber nicht nur anhängen. Er soll einfach da eingefügt werden, wo gerade der Cursor steht. Unabhänig, ob der Cursor in einm Edit-Feld steht, in einem langen Brief im Word, Notepad etc.

bye

Dax 25. Sep 2004 15:03

Re: Text an ein anderes Fenster schicken.
 
SendKeys emuliert Tastendrücke, also müsste das so gehen wie du das willst.

glb 25. Sep 2004 15:32

Re: Text an ein anderes Fenster schicken.
 
Ich hab' mir mal SendKeys besorgt(SRUtils).
Hmmmm .... wohin sendet SendKeys die Daten?
In der Source steht
Keybd_Event(Key, 0, KEYEVENTF_KEYUP, 0);

Wieso muss man kein handle angeben. Schickt Keybd_Event die Tasten an das aktive Fenster?

Wie dem auch sei, es funktioniert nicht :(
Jetzt hab' ich mir mal meinen eigenen SendKey gebastelt:

Delphi-Quellcode:
function SendKey (Handle : HWnd; Text : PChar) : Boolean;
var i : Integer;
    s : String;
begin
s := Text;
for i := 0 to length(s) -1 do
begin
  PostMessage(Handle, wm_KeyDown, Ord((Text[i])),0);
end;

end;
Es tut ... fast :mrgreen: bis auf die Tatsache, daß im Notepad nicht "Hallo Du da" ankommt, sondern
h1/ d 41 :lol:
Was ist den nun falsch?

Christian Seehase 26. Sep 2004 00:37

Re: Text an ein anderes Fenster schicken.
 
Moin glb,

auf jeden KeyDown muss auch ein KeyUp erfolgen.

glb 26. Sep 2004 13:10

Re: Text an ein anderes Fenster schicken.
 
Hallo,

ich habe "meinen" SendKey nun etwas erweitert...

Delphi-Quellcode:
function SendKey (Handle : HWnd; Text : PChar) : Boolean;
var i             : Integer;
    s             : String;
    c             : Char;
    ret           : word;
    flag          : DWORD;
    hByte         : Byte;
    vKey          : Byte;
begin
s := Text;

for i := 0 to length(s) -1 do
begin
  c     := text[i];
  ret   := VkKeyScan(c);
  hByte := HiByte(ret);
  vKey  := LoByte(ret);
  if hByte = 0 then
  begin
    PostMessage(Handle, wm_Keydown,         0,0);
    PostMessage(Handle, wm_KeyUP , VKey     ,0);
  end
  else
  begin
    PostMessage(Handle, wm_KeyDown,         0,xxx); // xxx= hier muss nun noch die Shift-Taste
    PostMessage(Handle, wm_KeyUP , VKey     ,xxx); // "mitgedrüpckt werden.. aber wie???
  end;
end;
Ich möchte/muss PostMessage verwenden, da ich den Text an ein vorher ermitteltes Fenster schicken will.

mit keybd_event würde es ja so gehen:

Delphi-Quellcode:
keybd_event(VK_SHIFT, 1, 0, 0);
keybd_event(VkKeyScan('L'), 1, 0, 0);
keybd_event(VkKeyScan('L'), 1, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 1, KEYEVENTF_KEYUP, 0);
wie bekomme ich nun die Shift-taste mit PostMessage gedrückt?
HELP!!!! :?: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.

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