VC如何模拟按键消息? 假设现在有一个别人的软件A,我想用VC写一段代码,类似于按键精灵的工作,自动点击软件A中的某个按钮!我想先用Findwindow找到该窗口,之后再进行模拟的按键消息! 不知是否可行! 具体是怎么样去模拟这个点击按钮的消息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可行。找到窗口,SendMessage到这个窗口 //发送命令一void CSenderDlg::OnCommand1() { //找到接收消息的窗口(窗口名为Receiver) CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,0); } 可以找到编辑框句柄,可以通过spy++得到它的与父窗口关系SendMessage(hWnd,WM_CHAR,_T("Test"),0); CWnd *pWnd; pWnd = CWnd::FindWindow(NULL,"计算器"); if (pWnd) pWnd->SendMessage(WM_KEYDOWN, 50 , 1);我这个试了下貌似不行,50是主键盘上2的虚拟键值! 我这个为什么不能实现在计算器中输入2 ? spy++得到它的与父窗口关系什么意思啊? SendInputmouse_eventkeybd_event都行 CWnd *pWnd; pWnd = CWnd::FindWindow(NULL,"计算器"); if (pWnd) pWnd->GetDlgItem(0x193)->SendMessage(WM_CHAR,WPARAM('12'),0);这样怎么不行? 193 是edit的ID HWND hWnd = FindWindow(NULL, _T("计算器"));HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);if(!hWnd){ cout<<"未找到"<<endl; return 0;}::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234"))); 貌似是没有WM_KEYUP 编辑框里谢东西发送WM_CHAR消息 有WM_KEYUP 和WM_KEYDOWN消息,你按下一个键就有一个WM_KEYIDOWN,谈起有WM_KEYUP, HWND hWnd = FindWindow(NULL, _T("计算器"));HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);if(!hWnd){ cout<<"未找到"<<endl; return 0;}::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));这个方法可行,那向按钮发送消息是如何发送的?有多个按钮,他们都是Button ,怎么去区分他们? HWND hWnd = FindWindow(NULL, _T("计算器"));HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);if(!hWnd){ cout<<"未找到"<<endl; return 0;}::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));可以用但是我如果有多个butto,怎么区分他们? 还有就是sendMessage的里面的WM消息要怎么写? 找到按钮的父窗口,FindWindow,然后利用FindWindowEx()找到该按钮的HWND伪代码:HWND hWnd = FindWindow(....);if(NULL != hWnd){ HWND hButton = FindWindowEx(hWnd, ...); if(NULL != hButton) { DWORD nId = GetDlgCtrlID(hButton); // 发送BN_CLICKED通知,通过WM_COMMAND消息 PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hButton); }} 也可以用FindeTopWindow和GetNextWindow获得这时候就要用到Spy++了 HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd(); HWND hBtn = FindWindowEx(hWnd,NULL,_T("Button"),_T("7")); if(hWnd) ::SendMessage(hBtn, WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(291,137));我这段代码有什么问题? HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd(); HWND hBtn1 = FindWindowEx(hWnd,NULL,_T("Button"),_T("7")); if(hWnd) { DWORD nId = ::GetDlgCtrlID(hBtn1); ::SendMessage( hWnd,WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hBtn1); }这样搞定了! 我的程序关闭后,为什么在进程里还有? ole操作word2007菜单 急!求高效率搜索系统文件算法 请问: 删除这2样东西 代码怎么写?? 关于函数SHGetFolderLocation的编译错误 在directshow中,如何从filter中发一个自定义消息给application [也散分200]vc写的中国年历,欢迎试用 请问怎样判断程序第一次运行? 请教如何在SQLSERVER中读取时间字段,并转为CTime型 我想在无模式对话框关闭的时候释放对话框内存,应该在相应那个消息? 【原创&交流】提高二维矢量绘图效率之一般做法 请教post 验证码登陆网站的问题?
//发送命令一
void CSenderDlg::OnCommand1()
{
//找到接收消息的窗口(窗口名为Receiver)
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,0);
}
可以
找到编辑框句柄,可以通过spy++得到它的与父窗口关系SendMessage(hWnd,WM_CHAR,_T("Test"),0);
CWnd *pWnd;
pWnd = CWnd::FindWindow(NULL,"计算器");
if (pWnd)
pWnd->SendMessage(WM_KEYDOWN, 50 , 1);我这个试了下貌似不行,50是主键盘上2的虚拟键值! 我这个为什么不能实现在计算器中输入2 ?
mouse_event
keybd_event
都行
CWnd *pWnd;
pWnd = CWnd::FindWindow(NULL,"计算器");
if (pWnd)
pWnd->GetDlgItem(0x193)->SendMessage(WM_CHAR,WPARAM('12'),0);这样怎么不行? 193 是edit的ID
HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
if(!hWnd)
{
cout<<"未找到"<<endl;
return 0;
}
::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));
有WM_KEYUP 和WM_KEYDOWN消息,你按下一个键就有一个WM_KEYIDOWN,谈起有WM_KEYUP,
HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
if(!hWnd)
{
cout<<"未找到"<<endl;
return 0;
}
::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));这个方法可行,那向按钮发送消息是如何发送的?
有多个按钮,他们都是Button ,怎么去区分他们?
HWND hEdit = FindWindowEx(hWnd, NULL, _T("Edit"), NULL);
if(!hWnd)
{
cout<<"未找到"<<endl;
return 0;
}
::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(_T("1234")));可以用
但是我如果有多个butto,怎么区分他们? 还有就是sendMessage的里面的WM消息要怎么写?
伪代码:
HWND hWnd = FindWindow(....);
if(NULL != hWnd)
{
HWND hButton = FindWindowEx(hWnd, ...);
if(NULL != hButton)
{
DWORD nId = GetDlgCtrlID(hButton);
// 发送BN_CLICKED通知,通过WM_COMMAND消息
PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hButton);
}
}
也可以用FindeTopWindow和GetNextWindow获得
这时候就要用到Spy++了
HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd();
HWND hBtn = FindWindowEx(hWnd,NULL,_T("Button"),_T("7"));
if(hWnd)
::SendMessage(hBtn, WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(291,137));我这段代码有什么问题?
HWND hWnd = FindWindow(NULL, _T("计算器"))->GetSafeHwnd(); HWND hBtn1 = FindWindowEx(hWnd,NULL,_T("Button"),_T("7")); if(hWnd)
{
DWORD nId = ::GetDlgCtrlID(hBtn1);
::SendMessage( hWnd,WM_COMMAND, MAKEWPARAM(nId, BN_CLICKED), (LPARAM)hBtn1);
}这样搞定了!