各位大神,請問如何知道某個桌面程式的某按鈕被點擊,即如截取它的訊息。
uj5u.com熱心網友回復:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
Size: Integer;
CopyDataStruct: TCopyDataStruct;
begin
h := FindWindow(nil, '接收視窗'); { 按標題查找目標視窗 }
if h > 0 then
begin
Size := ByteLength(Edit1.Text) + 2; { 多出的兩個位元組用于后面的 #0 }
CopyDataStruct.lpData := PChar(Edit1.Text + #0); { 要發送的字串, #0 表示 PChar 結束}
CopyDataStruct.dwData := WM_COPYDATA; { 指定訊息型別 }
CopyDataStruct.cbData := Size; { 指定要發送的資料的大小 }
SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct)); { 發送 }
end;
end;
end.
接收代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
protected
procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption := '接收視窗';
end;
procedure TForm1.WMCopyData(var Message: TWMCopyData);
begin
Memo1.Lines.Add(PChar(Message.CopyDataStruct.lpData));
end;
end.
uj5u.com熱心網友回復:
如果是同一個行程,可以多載WndProc,如果是另外行程,就要用Hook(鉤子)攔截轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76036.html
標籤:語言基礎/算法/系統設計
上一篇:求delphi7連Oracle11的ODAC,沒分了,請直接發給我
下一篇:天于Delphi的埠復用問題
