如何控制别的程序的某些东东。比如定时触发某个程序的一个按钮的点击事件

ChinaOk 2002-09-25 11:51:32
如何控制别的程序的某些东东。比如定时触发某个程序的一个按钮的点击事件

详细说明: 现有一个程序[甲]在运行,我想自己写一个程序[乙],同时运行甲乙。
乙控制甲,定时触发甲的某个按钮的点击事件.

该如何入手 ?
请各位赐教!
有例子就更好了!
谢谢




---------
我的分是在asp里挣的。delphi是新手!
...全文
221 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2002-12-10
  • 打赏
  • 举报
回复
ChinaOk的帖子当然要来灌上一灌~~

ehom?!看到伴水了?~~记帐,月底来接~~价目表如下·~

---------------
动作(次) 收费(元)
---------------
看 1.00
聊 5.00
亲   10.00
摸 7.00
添 20.00
抱 10.00
揉 2.00
做 200.00
爱 30.00
嫁 10000.00
离 50000.00
----------------
ehom 2002-12-10
  • 打赏
  • 举报
回复
都说完了,没什么好说的了!

只想说
SendMessage(hwnd, BM_CLICK, 0, 0);
也可

看见伴水了?难得!呵呵
王集鹄 2002-12-10
  • 打赏
  • 举报
回复
No.1 模拟按键
No.2 模拟鼠标
No.3 发送消息

嘻嘻嘻 三种方法~自由选择~ 嘻嘻嘻嘻
王集鹄 2002-12-10
  • 打赏
  • 举报
回复
var
vIndex: Integer;

const
cIndex = 2; //第几个按钮

function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
vBuffer: array[0..255] of Char;
begin
GetClassName(hwnd, vBuffer, 255);
if SameText(vBuffer, 'TButton') or SameText(vBuffer, 'Button') then begin
Inc(vIndex);
if vIndex = cIndex then begin
SendMessage(hwnd, WM_LBUTTONDOWN, 0, 0); //按下
SendMessage(hwnd, WM_LBUTTONUP, 0, 0); //放开
Result := False;
Exit;
end;
end;
Result := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
vHandle: THandle;
begin
vHandle := FindWindow('TFormZswangTest', nil); //寻找窗体句柄~~
if vHandle <= 0 then Exit;
vIndex := 0;
EnumChildWindows(vHandle, @EnumChildProc, 0); //遍历子窗体~~
end;
jackie168 2002-12-10
  • 打赏
  • 举报
回复
頂一下
siyu2002 2002-12-10
  • 打赏
  • 举报
回复
mark
DelUser 2002-12-10
  • 打赏
  • 举报
回复
楼上说的挺有道理!
rainsea 2002-12-10
  • 打赏
  • 举报
回复
原理如下,使用枚举窗口一级级找到那个控件
代码还没有测试呢,但肯定正确,SendMessage可能会有问题
你在试一下Keyboard_event(键盘事件)
类似的函数还有Mouse_event(鼠标事件)

function GetButtonHandle(hwnd: Integer; lparam: Longint):Boolean;
var
buffer: array[0..255] of Char;
buffer1: array[0..255] of Char;
begin
Result := True;
GetClassName(hwnd,buffer,256);//找目标窗口控件
if StrPas(Buffer)='Button' then//找到发消息的目标窗口控件
begin
GetWindowText(hwnd,buffer1,100);
if buffer1 = '保存(&S)' then
begin
PInteger(lparam)^ := hwnd; //目标窗口,目标控件
Result:=False; //ÖÕֹѭ»·
end;
end;
end;

然后在buttonclick中这样写。
var
Handle: Integer;
FButtonHandle: Integer;
strFileName : String;
begin
FButtonHandle := 0;
Handle := FindWindow(nil,目标窗口');
if Handle <> 0 then
begin
EnumChildWindows(Handle,@GetButtonHandle,Integer(@Handle));
FButtonHandle := Handle;
end;
SendMessage(FButtonHandle,WM_LBUTTONDOWN,0,0);
SendMessage(FButtonHandle,WM_LBUTTONUP,0,0);
end;
ddvboy 2002-12-10
  • 打赏
  • 举报
回复
深宇 2002-12-10
  • 打赏
  • 举报
回复
不会,帮你UP一下
ehom 2002-12-10
  • 打赏
  • 举报
回复
哦????????????????!!!!!!!!!!!!!!!

如果 zswang(伴水清清) 是 PLMM,这帐单我可以考虑下!呵呵!~~
daniel007 2002-09-25
  • 打赏
  • 举报
回复
system页中的DDE组件,可以用来进程间数据传输
tangss 2002-09-25
  • 打赏
  • 举报
回复
帮你UP一下!
日总是我哥 2002-09-25
  • 打赏
  • 举报
回复
function GetProcessAButtonHnd: THandle;
begin
Result := FindWindow('必须先知道ClassName', '');
end;

procedure RaiseClickEvent(const Hnd: THandle);
begin
SendMessage(Hnd, WM_LBUTTONDOWN, 0, 0);
end;

procedure TForm1.Button1OnClick(Sender: TObject);
begin
RaiseClickEvent(GetProcessAButtonHnd);
end;

嘻嘻:)
楼主见笑了~~

================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆

下载地址:
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
smhpnuaa 2002-09-25
  • 打赏
  • 举报
回复
两颗星的?这样的问题?嘿嘿!
bamboo_flute 2002-09-25
  • 打赏
  • 举报
回复
用windows的消息机制很方便的呀!
ChinaOk 2002-09-25
  • 打赏
  • 举报
回复
up
MFC2001 2002-09-25
  • 打赏
  • 举报
回复
说个思路先

找到程序甲中button小窗体的handle

定时给它发click的消息
日总是我哥 2002-09-25
  • 打赏
  • 举报
回复
1、使用FindWindow找出程序[甲]中的Button的Handle
2、使用SendMessage或者PostMessage函数发送单击事件(WM_LBUTTONDOWN)



================================================================
     ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆

下载地址:
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
ChinaOk 2002-09-25
  • 打赏
  • 举报
回复
最后一次up

看来是没希望了。
想要分就跟一下吧。
加载更多回复(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧