如何用SendMessage向另一个程序窗体上面的按钮发送点击? SendMessage(hwnd,WM_CHAR ,'0',0)表示往某一edit box里输入一字符,如何用SendMessage模拟某一按钮被按下(例如ok按钮)被按下该如何写?我用::SendMessage(hwnd1,BN_CLICKED,0,0)) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 错了,是: {$EXTERNALSYM WM_LBUTTONDOWN} WM_LBUTTONDOWN = $0201; {$EXTERNALSYM WM_LBUTTONUP} WM_LBUTTONUP = $0202; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginsendmessage(button1.Handle, WM_LBUTTONDOWN,0,0);end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginsendmessage(button1.Handle,WM_LBUTTONUP,0,0);end; 上面的理解错误!!我另一个程序窗体指的是别的程序,比如qq,codesite,不是在同一个应用程序里面的 先使用FindWindow()函数找到该按钮的句柄,然后使用PostMessage()来发送WM_KEYDOWN消息。 好,贴出来!!!不起作用阿,不知道原因,请大师们指点!!!!!!unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Label1: TLabel; Memo1: TMemo; Button1: TButton; Edit1: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; hWnd:LongInt; thehwnd:longint;implementation{$R *.dfm} function EnumChildWndProc(AhWnd:LongInt; AlParam:lParam):boolean;stdcall;var WndClassName: array[0..254] of Char; WndCaption: array[0..254] of Char;begin GetClassName(AhWnd,wndClassName,254); GetWindowText(aHwnd,WndCaption,254); if wndcaption='Close' then begin thehwnd:= AhWnd; showmessage(inttostr(thehwnd)); end; with form1.memo1 do begin lines.add( string(wndClassName)); lines.add( string(wndCaption)); lines.add('-------'); end; result:=true;end;procedure TForm1.Button1Click(Sender: TObject);begin memo1.Lines.Clear; Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称'); hWnd:=FindWindow(nil,pchar(Edit1.Text)); if hWnd<>0 then begin EnumChildWindows(hWnd,@EnumChildWndProc,0); end else MessageBox(self.handle,'没找到该窗口句柄','提示',0);end;procedure TForm1.Button2Click(Sender: TObject);varbid:integer;begin//SendMessage(hWnd,WM_LBUTTONDOWN,0,LongInt(Pchar('sdafdsf')));bid:=getdlgctrlid(thehwnd);//getdlgitemSendMessage(hWnd,wm_command,MAKEWPARAM( bid, BN_CLICKED ),thehwnd);//上面不起作用阿,不知道原因,请大师们指点!!!!!!//SendMessage(hWnd,wm_command,bid,thehwnd);end;procedure TForm1.FormCreate(Sender: TObject);beginedit1.Text:='codesite dispatcher settings';end;end. 如上面兄弟所说,要Send两个MessageSendMessage(hWnd,WM_LBUTTONDOWN,0,0);SendMessage(hWnd,WM_LBUTTONUP,0,0);hWnd为你找到的按钮句柄 //这个可以解决你的问题//功能自动发送消息//你打开一个QQ‘发送消息的窗口‘procedure TForm1.Button1Click(Sender: TObject);var hwnd1,hwnd2,hwnd3: DWORD;begin hwnd1:=FindWindow(nil,'发送消息'); if hwnd1<>0 then begin hwnd2:= findwindowex(hwnd1,0,'RICHEDIT',''); hwnd3:=edit1.Handle; SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text))); SendMessage (hwnd1, WM_COMMAND, 1, 0); end;end; SendMessage (hwnd1, WM_COMMAND, 1, 0); //这句话可以发送消息 procedure TForm1.Button2Click(Sender: TObject);begin SendMessage(thehwnd, WM_LBUTTONDOWN, 0, 0); SendMessage(thehwnd, WM_LBUTTONUP, 0, 0);end; //这样也可以实现procedure TForm1.Button1Click(Sender: TObject);var hwnd1,hwnd2,hwnd3,hwnd4: DWORD;begin hwnd1:=FindWindow(nil,'发送消息'); if hwnd1<>0 then begin hwnd2:= findwindowex(hwnd1,0,'RICHEDIT','');// hwnd2:=ChildWindowFromPoint(hwnd1, point(50, 50)); hwnd3:=edit1.Handle; SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text))); hwnd4:= findwindowex(hwnd1,0,'Button','送讯息(&S)'); //找到送信息按钮, SendMessage (hwnd4,WM_LBUTTONDOWN , 0, 0); //模拟按下 SendMessage (hwnd4,WM_LBUTTONUp , 0, 0); end;end; 关于TreeView的问题!!!!!!!! 第三方控件TOLEEdit(能插入图象)为何不支持自定义的弹出菜单?郁闷! IIS+WEB(幼稚的问题)? 在BDE支持下使用SQL ado连接远程oracle服务器.怎么连? 请问那位兄台有工资管理的系统分析,可否一观以便学习。 控件问题??? 用indy控件如何发送附件?谁给个例子看看 请问如何用delphi判断数据库中某字段值是基数还是偶数? delphi FM框架程序 如何获取webbrowser源码? 急!急!急!在delphi中如何判断另外一个应用程序是否运行? 请教各位:如何检测到键盘发出的控制字符?
{$EXTERNALSYM WM_LBUTTONDOWN}
WM_LBUTTONDOWN = $0201;
{$EXTERNALSYM WM_LBUTTONUP}
WM_LBUTTONUP = $0202;
Shift: TShiftState; X, Y: Integer);
begin
sendmessage(button1.Handle, WM_LBUTTONDOWN,0,0);
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
sendmessage(button1.Handle,WM_LBUTTONUP,0,0);
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
hWnd:LongInt;
thehwnd:longint;
implementation{$R *.dfm}
function EnumChildWndProc(AhWnd:LongInt;
AlParam:lParam):boolean;stdcall;
var
WndClassName: array[0..254] of Char;
WndCaption: array[0..254] of Char;
begin
GetClassName(AhWnd,wndClassName,254);
GetWindowText(aHwnd,WndCaption,254);
if wndcaption='Close' then
begin
thehwnd:= AhWnd;
showmessage(inttostr(thehwnd));
end;
with form1.memo1 do
begin lines.add( string(wndClassName));
lines.add( string(wndCaption));
lines.add('-------');
end;
result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
Memo1.Lines.Add(Edit1.Text+' 有如下控件类名称');
hWnd:=FindWindow(nil,pchar(Edit1.Text));
if hWnd<>0 then
begin
EnumChildWindows(hWnd,@EnumChildWndProc,0);
end
else MessageBox(self.handle,'没找到该窗口句柄','提示',0);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
bid:integer;
begin
//SendMessage(hWnd,WM_LBUTTONDOWN,0,LongInt(Pchar('sdafdsf')));
bid:=getdlgctrlid(thehwnd);
//getdlgitem
SendMessage(hWnd,wm_command,MAKEWPARAM( bid, BN_CLICKED ),thehwnd);
//上面不起作用阿,不知道原因,请大师们指点!!!!!!
//SendMessage(hWnd,wm_command,bid,thehwnd);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='codesite dispatcher settings';end;end.
SendMessage(hWnd,WM_LBUTTONUP,0,0);hWnd为你找到的按钮句柄
//功能自动发送消息
//你打开一个QQ‘发送消息的窗口‘
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd1,hwnd2,hwnd3: DWORD;
begin
hwnd1:=FindWindow(nil,'发送消息');
if hwnd1<>0 then
begin
hwnd2:= findwindowex(hwnd1,0,'RICHEDIT','');
hwnd3:=edit1.Handle;
SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text)));
SendMessage (hwnd1, WM_COMMAND, 1, 0);
end;
end;
begin
SendMessage(thehwnd, WM_LBUTTONDOWN, 0, 0);
SendMessage(thehwnd, WM_LBUTTONUP, 0, 0);
end;
var
hwnd1,hwnd2,hwnd3,hwnd4: DWORD;
begin
hwnd1:=FindWindow(nil,'发送消息');
if hwnd1<>0 then
begin
hwnd2:= findwindowex(hwnd1,0,'RICHEDIT','');
// hwnd2:=ChildWindowFromPoint(hwnd1, point(50, 50));
hwnd3:=edit1.Handle;
SendMessage(hwnd2, WM_SETTEXT, 1004,integer(pchar(edit1.Text)));
hwnd4:= findwindowex(hwnd1,0,'Button','送讯息(&S)'); //找到送信息按钮,
SendMessage (hwnd4,WM_LBUTTONDOWN , 0, 0); //模拟按下
SendMessage (hwnd4,WM_LBUTTONUp , 0, 0);
end;
end;