如何用c++unity检测按钮按下某个按钮周围是否有满足条件的按钮个数

有时我们可能会在某个程序中用到模拟按钮点击事件。
本文中的例子在MFC程序中调试通过,duilib的没试过,还需探索
不多说,上代码:
1 #include "stdafx.h"
2 #include "windows.h"
3 #include "Psapi.h"
4 #include "atlstr.h"
5 #include &string.h&
6 #include&iostream&
7 using namespace
9 #pragma comment(lib,"Psapi");
10 #define ID_EXEC_CURFILE 32807
11 #define ID_RCL_HELP 32804
14 //根据exe名字一部分查找进程id,返回
15 DWORD FindProcess(char *strProcessName)
DWORD aProcesses[1024], cbNeeded, cbMN
HMODULE hMods[1024];
char szProcessName[MAX_PATH];
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i& (int) (cbNeeded / sizeof(DWORD)); i++)
hProcess = OpenProcess( /*PROCESS_QUERY_INFORMATION | PROCESS_VM_READ*/PROCESS_ALL_ACCESS, FALSE, aProcesses[i]);
if (hProcess == NULL)
EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
if(strstr(szProcessName, strProcessName))
OutputDebugString(_T("Find Process ok\n"));
cout&&szProcessName&&
return(aProcesses[i]);
OutputDebugString(_T("Find Process fail\n"));
42 /*******************************************************************
43 * 函数名称:GetWindowHandleByPID
能:根据进程ID找窗口句柄
数:dwProcessID:进程Id号
46 * 返 回 值:成功返回窗口句柄,失败返回NULL
47 *******************************************************************/
48 HWND GetWindowHandleByPID(DWORD dwProcessID)
HWND h = GetTopWindow(0);
while ( h )
DWORD pid = 0;
DWORD dwTheardId = GetWindowThreadProcessId( h,&pid);
if (dwTheardId != 0)
if ( pid == dwProcessID/*your process id*/ )
// here h is the handle to the window
OutputDebugString(_T("GetWindowHandleByPID ok\n"));
h = GetNextWindow( h , GW_HWNDNEXT);
OutputDebugString(_T("GetWindowHandleByPID faild\n"));
return NULL;
75 /*******************************************************************
76 * 函数名称:SendMsgChildWindow
能:遍历子窗口句柄并发送按钮消息
数:hWnd:父窗口句柄
79 * 返 回 值:null
80 *******************************************************************/
81 void SendMsgChildWindow(HWND hWnd, UINT command, UINT ID, UINT eventType)
HWND hd = ::GetWindow(hWnd,GW_HWNDNEXT);
if (hd == NULL)
cout && "can not find window" &&
while(hd!=NULL)
//循环得到所有的子窗口
PostMessage(hd,command,MAKEWPARAM(ID, eventType),0);
hd=GetNextWindow(hd,GW_HWNDNEXT);
//PostMessage(HWND_BROADCAST,command,MAKEWPARAM(ID, eventType),0);//广播,不建议使用,其他窗口也会收到
96 /*******************************************************************
97 * 函数名称:FindWhndByName
能:根据exe名字找窗口句柄
数:exeName
100 * 返 回 值:窗口句柄,找不到返回NULL
101 *******************************************************************/
102 HWND FindWhndByName(char *exeName)
handle = OpenProcess(
PROCESS_QUERY_INFORMATION |
// Required by Alpha
PROCESS_CREATE_THREAD
// For CreateRemoteThread
PROCESS_VM_OPERATION
// For VirtualAllocEx/VirtualFreeEx
PROCESS_VM_WRITE,
// For WriteProcessMemory
PROCESS_ALL_ACCESS,
FALSE, FindProcess(exeName));
if (handle == NULL)
OutputDebugString(_T("error: handle null\n"));
DWORD ProcessId = GetProcessId(handle);
return GetWindowHandleByPID(ProcessId);
121 int CharToInt(char* str)
int ret = atoi(str);
127 int HexstrToInt(char *str)
sscanf(str,"%x",&nValude);
134 int _tmain(int argc, _TCHAR* argv[])
if (argc & 5)
OutputDebugString(_T("parameters not enough\n"));
else if (argc == 5)
wHnd = FindWhndByName(argv[1]);
SendMsgChildWindow(wHnd,HexstrToInt(argv[2]),CharToInt(argv[3]),CharToInt(argv[4]));
else if (argc == 6)
wHnd = FindWhndByName(argv[1]);
if (wHnd == NULL)
wHnd = FindWhndByName(argv[2]);
cout && "second exeName" &&
SendMsgChildWindow(wHnd,HexstrToInt(argv[3]),CharToInt(argv[4]),CharToInt(argv[5]));
四个参数:第一个参数:进程的名字 例如:QQ.exe 第二个参数:消息类型
例如: 0x0111 代表 WM_CZMMAND 第三个参数:资源ID(按钮,菜单等)例如:32807(按钮ID可在程序源码中找到) 第四个参数:事件类型
例如:0 代表按钮单击(BN_CLICKED)
第二第四个参数具体值可在:WinUser.h 头文件中找到调用实例:PostMsgProcess.exe QQ.exe 0x 0
五个参数:第一个参数:进程的名字 例如:QQ&第二个参数:进程的名字 例如:QQ.exe
第三个参数:消息类型
例如: 0x0111 代表 WM_CZMMAND 第四个参数:资源ID(按钮,菜单等)例如:32807(按钮ID可在程序源码中找到) 第五个参数:事件类型
例如:0 代表按钮单击(BN_CLICKED)
第二第四个参数具体值可在:WinUser.h 头文件中找到调用实例:PostMsgProcess.exe QQ QQ.exe 0x 0
如果有多个符合条件的窗口,先根据第一个参数找对应的窗口,找到就不再寻找,只能找一个符合条件的窗口发送消息
需要的库和头文件:http://files.cnblogs.com/files/george-cw/psapi.rar
阅读(...) 评论()只需一步,快速开始
后使用快捷导航没有帐号?
查看: 4434|回复: 12
易语言如何实现判断网页上的某个按钮或ID元素是否被点击?
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
如题一样,要源码或解答!!!
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
求大神 教下小弟
TA的每日心情奋斗 01:46签到天数: 11 天[LV.3]偶尔看看II
表示不懂,我也是菜鸟
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
哎 怎么没大神 教啊&&求求啊&&急死了
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
难道 就没一个人会?
TA的每日心情擦汗 22:29签到天数: 140 天[LV.7]常住居民III
表示不会易语言
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
我靠 这还是 红盟 吗
TA的每日心情奋斗 21:50签到天数: 293 天[LV.8]以坛为家I
表示不懂,我也是菜鸟
TA的每日心情奋斗 00:07签到天数: 13 天[LV.3]偶尔看看II
难道就没人会吗
TA的每日心情擦汗 15:10签到天数: 94 天[LV.6]常住居民II
要百度,gongle& & 干什么那??
TA的每日心情擦汗 15:10签到天数: 94 天[LV.6]常住居民II
我帮楼主搜了一下、一搜一大把、、、
头像被屏蔽
TA的每日心情怒 10:45签到天数: 46 天[LV.5]常住居民I
提示: 作者被禁止或删除 内容自动屏蔽
TA的每日心情开心 18:29签到天数: 72 天[LV.6]常住居民II
你太蛋疼了,如果是POST提交呢??
正确方法:用精易模块进行网页操作
新年新气象!管理组对外招聘公告
手机扫我进入移动触屏客户端
关注我们可获取更多热点资讯
Honor accompaniments. theme macfeec++语言中怎样通过调用函数来判断一个数是否是质数,_百度知道
c++语言中怎样通过调用函数来判断一个数是否是质数,
我刚学c++,希望有人告诉我,非常感谢……
我有更好的答案
#include &stdafx.h&#include&iostream&bool Fun(int i){ if(i==1) else {
for (int j = 2; j & j++)
if (i % j == 0) }}void main(){ cout&&&请输入你要判断的数:&;
cin&&n; if(Fun(n))
cout&&&该数是质数!&&& else
cout&&&该数不是质数!&&&}
采纳率:43%
Input START and END=?&);scanf(&%d%d&;=j+=2)&#47,nm,i,j,*判定能否被从3到整数的一半中的某一数所整除*/*判定指定范围内的整数是否为素数*/nm)); /*输入正确的范围*/printf(&2!(n1&0&&n1&lt..PRIME TABLE(%d–%d)…………\,2)!(i%j))flag=0; /*若能整除则不是素数*/if(flag) printf(++count%15,count=0;for(flag=1,j=3;flag&&j&i&#47,n1,nm);if(n1==1||n1==2) /*处理素数2*/{printf(&%4d&}void qiusushu(){int n1void main(){qiusushu();}while(;%4d&,&nm); /*输入求素数的范围*/do{printf(&%4d&#92?&………;if(;n&;n1=3;count++;}for(i=n1;i&{if(!(i%2))i++) &#47:&n&,&n1
为您推荐:
其他类似问题
质数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。http://download.chinaitlab.com/program/files/9312.html&http://download.chinaitlab.com/special/visualcebook.htm&1.&如果你还没有启动Visual&C++,那么启动Visual&C++。&2.&使用File|New命令显示如下图所示的New对话框。注意,我已经选择了&Projects选项卡并加亮了要在本例中使用的工程类型。&3.&当选择了Win32&Console&Application后,在Project&Name&域中键入程序&名称。这个样本程序使用的名称为Console。你或许还需要修改一下Location域&的内容,那么单击一下该域旁边的浏览按钮,系统会显示Choose&Directory对话&框,在这个对话框中选择应用程序的存放目录。&4.&单击OK按钮。你会看到Win32&Console&Application&-&Step&1&of&1对话框,&如下图所示。注意,在这个对话框中有几个应用程序类型供选择。这也是Visual&C++&6.0的一个新特性。以前版本的Visual&C++简单地创建一个空的工程。现在到了选择要创建哪种类型工程的时候了(即使空工程也要进行选择)。&5.&(必要时)选择An&Empty&Project,然后单击Finish。你会看到一个New&Project&Information对话框,它告诉你都选择了哪些选项。&6.&单击OK按钮创建示例程序。&在该工程真正能够运行之前,还需要完成其它一些步骤。该工程需要&MFC&类。当你把对该类的支持加入到上面的应用程序向导的设置中时,再次使用该向导把&DOS&应用程序转换到&Windows&下时所需的重写代码的代码量就会显著&减少。选择Project&|&Settings&命令显示Project&Settings对话框,选择该对话框的&General&选项卡,并在Settings&For&组合框中选择All&Configurations,在Microsoft&Foundation&Classes组合框中选择Use&MFC&in&a&Shared&DLL选项。单击OK完成设置工作。&现在到了给示例程序添加代码的时候了。需要完成的第一件事是向工程中&添加一个文件,让我们看看添加过程。&1.&使用File&|&New命令打开New对话框,选择File选项卡,其中显示了文&件类型的完整列表,包括Resource&Template以及像Icon&File这样的各种图像文&件。&2.&加亮C++&Source&File选项。由于我们要在样本代码中添加一些类,因此&要选择C++源文件选项。&3.&在File&Name&域中键入Console(Visual&C++会自动添加上正确的文件扩&展名)。&4.&单击OK。系统显示一个空的C++源文件。&现在我们有了一个要使用的空文件,该添加一些代码了
其它5条答案
附近的朋友等待您的帮助
包打听移动版当前位置:-> ->上一篇:下一篇:
在线提问 问题标题: 问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)

我要回帖

更多关于 紧急按钮检测报告 的文章

 

随机推荐