如何用SendMessage模拟某一按钮的点击事件
今天在写程序的时候,用到了进程间的通信,上网查了些相关的资料,一般都是通过消息、共享内存、 socket,管道(Pipe),信箱(Mailslot),等等。因为我进程间通信的时候数据量不太大,所以就先测试了一下消息。
一般情况下,用消息来实现进程通信相对比较简单,自定义消息、手动添加消息映射、编写响应函数,发送端先FindWindow(),然后就向目标进程SendMessage()。自定义消息的测试没有什么问题,但在向目标进程发送系统消息时遇到了些问题,发送WM_CLOSE消息也可以,但是在我尝试发送按钮消息时,遇到了些麻烦,在查资料,并多次测试后终于搞定,看到网上一些资料都没有明确的答案,就把我的一些体会发在这里,有朋友遇到这个问题时也就少走点弯路。当然,我个人水平也很菜,高手就不要看了!
自定义消息和消息映射就不多说了,获取窗口进程:
CWnd *pWnd=CWnd::FindWindow(NULL,str);
模拟其中窗口上的按钮点击事件可以采用以下的方法:
今天在写程序的时候,用到了进程间的通信,上网查了些相关的资料,一般都是通过消息、共享内存、 socket,管道(Pipe),信箱(Mailslot),等等。因为我进程间通信的时候数据量不太大,所以就先测试了一下消息。
一般情况下,用消息来实现进程通信相对比较简单,自定义消息、手动添加消息映射、编写响应函数,发送端先FindWindow(),然后就向目标进程SendMessage()。自定义消息的测试没有什么问题,但在向目标进程发送系统消息时遇到了些问题,发送WM_CLOSE消息也可以,但是在我尝试发送按钮消息时,遇到了些麻烦,在查资料,并多次测试后终于搞定,看到网上一些资料都没有明确的答案,就把我的一些体会发在这里,有朋友遇到这个问题时也就少走点弯路。当然,我个人水平也很菜,高手就不要看了!
自定义消息和消息映射就不多说了,获取窗口进程:
CWnd *pWnd=CWnd::FindWindow(NULL,str);
模拟其中窗口上的按钮点击事件可以采用以下的方法:
» 阅读全文
转自 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,然后发送消息给他来实现了对另一个程序的控制
基本思路就是:
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();
}
---- 下面介绍在制作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里讲得很清楚了。
(一)创建捕获窗口:
€一 视频采集及回放
我采用VFW实现视频采集。VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。下面我主要叙述通过宏函数来完成的采集过程,每一个宏函数实现的功能都可以用相应的消息机制来实现,具体msdn里讲得很清楚了。
(一)创建捕获窗口:
» 阅读全文
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
下的PendingFileRenameOperations
下的PendingFileRenameOperations




