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 Sendmessage und Zwischenablage Problem (https://www.delphipraxis.net/5819-sendmessage-und-zwischenablage-problem.html)

Biohazard 20. Jun 2003 08:48


Sendmessage und Zwischenablage Problem
 
Hallo,
habe da ein kleines Problem. Ich möchte, wenn ich den HotKey drücken den markierten Text aus einer anderen Anwendung an mein Prog übergeben. (Später soll sich das Wort noch selber markieren).
Dabei gehe ich so vor, daß zu diesem Zeitpunkt das Handle ermittelt wird das unter dem Mousecursor ist. Der Rest wird über die Zwischenablage erledigt. Innerhalb meines Programmes funktioniert es aber mit anderen Progs nicht, obwohl ich das Handle der jeweiligen Komponente habe.
Es wird erst gar nichts in die Zwischenablage kopiert. Warum nicht? Kann mir da jemand helfen.

Hier mal der Code zur Hilfe:

Code:
procedure TForm1.WMHotKey(Var Msg: TWMHotkey);
var rPos: TPoint;
  hWnd: THandle;
  a:integer;
  b:string;
begin
  case Msg.IdHotKey of
    ID:
    begin
    GetCursorPos(rPos);
    hWnd := WindowFromPoint(rPos);
    SendMessage(hwnd, WM_COPY, 0, 0);
    edit1.Text:='';
    b:=edit1.text ;
    han:=findwindow(0,'Hossa');
    hwnd2:=findwindowex(han,0,'TEdit',PAnsiChar(b));
    SendMessage(hwnd2, WM_PASTE, 0, 0);
         end;
    ID+1:
         begin
           //.....
         end;
  end;
  inherited;
end;

MathiasSimmack 20. Jun 2003 10:44

Re: Sendmessage und Zwischenablage Problem
 
Zitat:

Zitat von Biohazard
Es wird erst gar nichts in die Zwischenablage kopiert. Warum nicht?

Weil du nichts markierst:
Zitat:

Delphi-Quellcode:
hWnd := WindowFromPoint(rPos);
SendMessage(hwnd, WM_COPY, 0, 0);

Wenn das ausgewählte Fenster z.B. auch ein Editfeld ist, dann solltest du erst mal den vorhandenen Text selektieren:
Delphi-Quellcode:
SendMessage(hWnd,EM_SETSEL,0,-1);
dann kannst du auch was kopieren!

Biohazard 20. Jun 2003 11:34

Innerhalb meines Progs geht es. will ich aber von einem anderen Prog den Text eines Feldes geht es nicht.

Kann das evtl hiran liegen:

Code:
procedure TForm1.FormCreate(Sender: TObject);
var ok: longbool;

begin
  i:=0;
  ok:=RegisterHotKey(Form1.Handle, ID, MOD_Alt, Ord('Q'));
  if not ok then showmessage('Fehler');
  ok:=RegisterHotKey(Form1.Handle, ID+1, MOD_control, vk_f1);
end;
Irgendwie stört das form1. Aber ich weiß nicht wie das sonst funzen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.

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