delphi自动点击按钮的问题

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
h, i: HWND;
j, k : HWND;
l, m : HWND;

begin
h := FindWindow(nil, '搜狗拼音输入法 5.2正式版 安装');

while(h<>0) do
begin

i := FindWindowEx(h,0,'Button','下一步(&N) >');
SendMessage(i, BM_CLICK, 0, 0);
sleep(100);
memo1.Lines.Add('action 1') ;

j := FindWindowEx(h,0,'Button','我接受(&I)');
SendMessage(j, BM_CLICK, 0, 0);
sleep(500);
memo1.Lines.Add('action 2') ;
这是代码,前面几个按钮都点击成功不知道最后一个为什么总是失败

end;

end;

end.
我没设断点,但是窗体上接了个memo,没点击一个按钮memo就会显示一定字符,前几个按钮都正常可以点击,就是最后一个,显示点击了但是实际并没有成功

第1个回答  2013-08-06
你好,这个问题所在我可能告诉你,因为点击是两个事件才有效,你只写了一个,就是按下,没有写弹起的,前两个是因为有第三个按下的,所以系统会调弹起的,最后一个没有再调用按下——弹起的没执行,所以不成功,需要改一下。下面是演示代码,不一定正确,你自己 查查。
SendMessage(j, BM_CLICK_UP, 0, 0);其他几个也建议发出弹起的消息。追问

rich556677你把函数搞清楚了在说话。。。。
你的方法我早就试过了,不行
另外你说的那中格式是sendmessage(h1,WM_LBUTTONDOWN,0,0)。。。

第2个回答  2013-08-05
SendMessage(j, BM_CLICK, 0, 0);下断点,然后运行看一下j是不是取到值了,如果没有说明那个按钮文本你可能写的不对,用spyit之类的检查一下那个按钮。本回答被提问者采纳
第3个回答  2013-08-06
、一花一世界,一叶一追寻。一曲一场叹,一生为一人。
 34、谁应了谁的劫谁又变成了谁的执念。
 35、尘缘从来都如水,罕须泪,何尽一

delphi自动点击按钮的问题
你好,这个问题所在我可能告诉你,因为点击是两个事件才有效,你只写了一个,就是按下,没有写弹起的,前两个是因为有第三个按下的,所以系统会调弹起的,最后一个没有再调用按下——弹起的没执行,所以不成功,需要改一下。下面是演示代码,不一定正确,你自己 查查。SendMessage(j, BM_CLICK_U...

delphi如何自动点击窗体中的任意一个坐标点?
最后两个参数一般设为0,具体解释请参考MSDN或Delphi帮助。如果需要程序运行时自动点击窗体中某个点,首先需要获取该点的绝对坐标(相对于整个屏幕),一般是将窗体的坐标+上窗体内的坐标。如(50,50)的绝对坐标可能是(Form1.Left+50,Form1.Top+50),此值不一定准确,需要自己修正。mouse_event(MOUSEEVENT...

Delphi DBGridEH查询出内容之后,自动执行选中点击第一行的内容动作.
DBGrid是数据展示组件,它通过数据感知组件例如DataSource对数据组件如DataSet进行响应,因此,在一个DataSet或Query打开之后,执行First语句即可将数据指针(游标)指向首行,然后对当前行进行操作即可。原理如此,数据库操作均如此。

如何知道delphi的onclick
不是很懂你问的问题。。onclick事件在很多空间里面都能使用到。。比如button,当你双击你想要产生onclick事件的按钮。。就会在代码中自动生成onclick事件。。。也可以选择该组件。。在左下角的属性旁边的事件里面找到onclick事件。。。单击选择就可以在代码中生成了。。其他组件的用法差不多。。。不过在...

delphi mapx测距问题,运行的时候每当我点到第二个点到时候开始报错list...
1、 for i:=1 to CMapXPoints(Points).Count-1 do \/\/应该就是for循环这一片的问题 看一下:CMapXPoints(Points).Count-1 =?x2:=CMapXPoints(Points).Item[i+1].X;y2:=CMapXPoints(Points).Item[i+1].Y;Item[i+1]???2、既然怀疑在这部分出问题了,你可以试着修改数组...

Delphi中点击DBGrid中某一单元格时,后面出现个按钮可以点进去,出现一...
用delphi自带的DBGrid就能很好的实现这个功能:在DBGrid 中添加你要再Grid中显示的所有字段(columns属性),然后选择你要出现按钮的那个字段,将属性ButtonStyles 设置为cbsEllipsis,然后再 DBGrid 的 OnEditButtonClick时间中编写探出新窗口的代码即可 ...

delphi点击外部程序的按钮
首先你需要获得你要点击的按钮的句柄,然后你可以通过你的Delphi程序给该按钮发送消息(sendmessage之类的API函数)。消息的格式你可以通过spy++来获得(spy++不但可以获得你需要的句柄,还可以得到某个事件发生时所产生的消息。)具体做法为:把spy++获得消息的靶型图标拖到你要发送消息的按钮上,这是你...

关于Delphi的PageControl使用问题!
在TabSheet1上放置button2,TabSheet2上放置button1。one和two都是全局变量!然后在TabSheet SHOW时间中就可以实现了!procedure TForm1.TabSheet1Show(Sender: TObject);begin if one then begin ShowMessage('1');\/\/换成你刷新数据的动作 one:=false;end;end;procedure TForm1.TabSheet2Show(Sender: ...

delphi edit1,edit2文本框用代码清空,然后点击button1时,显示两个不能...
procedure TForm1.Button1Click(Sender: TObject);var i,s:integer;begin if Edit1.Text='' then begin ShowMessage('Edit1不能为空,请输入数字');Exit;end;if Edit2.Text='' then begin ShowMessage('Edit2不能为空,请输入数字');Exit;end;s := 0;for i:= StrToInt(Edit1.text) to ...

Delphi中popupmenu自动关闭问题
只是free了之后,就不能再弹出来了。你测试之所以不行,原因也很简单,你在鼠标进入时弹出菜单,这个时候菜单是当前窗体,所以你的窗体这时候是响应不到鼠标事件的,当然就没有鼠标移出的动作,不信的话,你可以用一个计时器试试,在弹出菜单时,就打开计时器,在几秒后free,应该就可以关闭了。

相似回答