如何用SendMessage模拟某一按钮的点击事件

今天在写程序的时候,用到了进程间的通信,上网查了些相关的资料,一般都是通过消息、共享内存、 socket,管道(Pipe),信箱(Mailslot),等等。因为我进程间通信的时候数据量不太大,所以就先测试了一下消息。

一般情况下,用消息来实现进程通信相对比较简单,自定义消息、手动添加消息映射、编写响应函数,发送端先FindWindow(),然后就向目标进程SendMessage()。自定义消息的测试没有什么问题,但在向目标进程发送系统消息时遇到了些问题,发送WM_CLOSE消息也可以,但是在我尝试发送按钮消息时,遇到了些麻烦,在查资料,并多次测试后终于搞定,看到网上一些资料都没有明确的答案,就把我的一些体会发在这里,有朋友遇到这个问题时也就少走点弯路。当然,我个人水平也很菜,高手就不要看了!

自定义消息和消息映射就不多说了,获取窗口进程:
CWnd *pWnd=CWnd::FindWindow(NULL,str);

模拟其中窗口上的按钮点击事件可以采用以下的方法:
控制其他程序
Posted in VC&C# on 2007/01/25 / 评论(0) »
转自 http://jonsoft.cn/blog

基本思路就是:
1)用FindWindow()找到目标程序的窗口Handle。
2)找到文本框的Handle,以及按钮的MessageID,
3)用SendMessage()方法设置文字,并触发事件。

我们先打开要控制的程序,如何将他隐藏就参看前几天的文章。
“后台调用外部程序的完美实现(Delphi)后台调用外部程序的完美实现(Delphi“)”,这里我只要谈如何用消息来实现和程序的控制。
首先我们得借助spy++,VC的工具有,各位就不用忙下载了。用其它的工具也可以了,这里只要是为了可以得到程序里面的控件的ID,
第一步先用,Handle:= FindWindow(nil, Pchar(‘title'));找到程序的窗口。
第二步:Handle1:=GetDlgItem(Handle,$0000040E);利用控件的ID得到控件的句柄,现在我们可以对句柄进行操作了。
第三步:利用handle的消息触发事件。在这里我的Handle1是一个按钮,我可以向它发送一个按下的消息。
SendMessage(Handle1,BM_CLICK,0,0);
这样就相当于你自己点击了另一个程序中的某个按钮。当然你还可以有更多的控制。

用spy++可以方便地找到控件的ID。
偏移量 功能
000003FA 退出程序
000003EE 输出目录
000003F0 关于
000003F1   帮助
000003F2    访问网页
000003F3    注册
000003F4    打开一个工程文件
000003F5    保存一个工程文件        
000003F8    开始转换
0000040E    选项
这是我今天早上做的,我将找到的句柄 给HANDLE1,然后发送消息给他来实现了对另一个程序的控制
一、引入Dialog技术

---- 下面介绍在制作ActiveX控件时引入有模式对话框技术,制作步骤如下:

创建一新的MFC ActiveX ControlWizard项目,取名为Hello,其他用缺省选项;
 
在ResourceView页中新增一对话框资源,命名为IDD_HELLODIALOG,可以在对话框上放自己的控件;
 
为对话框资源IDD_HELLODIALOG创建新类CHelloDialog,从CDialog继承;
 
确认在HelloCtrl.h中已加入语句#include "HelloDialog.h",为CHelloCtrl类添加成员变量CHelloDialog m_helloDialog;
 
用ClassWizard在Automation页中为CHelloCtrl添加一方法void DoHello(),外部名亦为DoHello;
void CHelloCtrl::DoHello()
{
// 显示对话框
m_helloDialog.DoModal();
}
转自http://blog.niwota.com/a/51871.htm
€一    视频采集及回放

   我采用VFW实现视频采集。VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。下面我主要叙述通过宏函数来完成的采集过程,每一个宏函数实现的功能都可以用相应的消息机制来实现,具体msdn里讲得很清楚了。

   (一)创建捕获窗口:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
下的PendingFileRenameOperations
分页: 6/17 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]