怎么能够实现,启动一个程序,然后模拟点击这个程序界面中的某个BUTTON,非常棘手,请大家帮忙,谢谢! 怎么能够实现,启动一个程序,然后模拟点击这个程序界面中的某个BUTTON,非常棘手,请大家帮忙,谢谢!现在只知道这个EXE的名字,知道BUTTON的名字,知道这个EXE启动后窗口的名字,其他的都不知道,请问该怎么实现,谢谢!急用啊![email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CreateProcessFindWindowGetWindowRectmouse_event或者SendInput 先用FindWindow扫描到这个窗口再用FindWindowEx扫描到按钮(也就是个子窗口)取得按钮位置,模拟鼠标动作(mouse_event)很简单 补充楼上,可以用SendMessage另:http://www.vckbase.com/document/viewdoc/?id=771 需要知道窗口的类名及标题名称和按钮的ID,这些都可以用SPY++得到。HWND hWnd = ::FindWindow(szClass, szTitle);HWND hWndButton = ::GetDlgItem(hWnd, nIDButton);::SendMessage(hWnd, WM_COMMAND, nIDButton, hWndButton); 还有一个小问题,在程序中调用一个.BAT文件,怎么知道这个BAT文件已经执行完毕了呢,谢谢! 你就写个小程序,打开,释放一个固定名称的互赤体,然后把他加到。bat总,你的程序就监测互斥体好了 知道按钮位置就好办,用mouse_event 我曾经做了个点击POPO的程序,但是他那个窗口不是常用的窗口类生成的,用上面的FindWindow GetDlgItem之类的方法得不到他的HWND ,也就没有办法发消息了,最后只能把用上面说的mouse_event方法,自己测算按钮的位置,再点击。 但这样做有些不好的地方,首先,被点击的程序要显示在当前窗口才行,其二精确度不是太高,响应时间也有点慢。 我做那个东西,是想利用POPO的免费短信功能来自动发送短信(比如说要是我不在电脑边,而QQ又有消息,那么就可以通过POPO转发短信) 以上是一种设想,由于我法很好的控制POPO所以还没能实现呢。 //枚举子窗口BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) { char buf[10]; GetWindowText(hwndChild,buf,10); if(strcmp(buf,"7") == 0) //按钮标题 { ::PostMessage(hwndChild,WM_LBUTTONDOWN,0,0); ::PostMessage(hwndChild,WM_LBUTTONUP,0,0); } return TRUE;}调用代码STARTUPINFO si;PROCESS_INFORMATION pi;memset(&si,0,sizeof(si));si.cb = sizeof(si);memset(&pi,0,sizeof(pi));//创建进程CreateProcess("c:\\windows\\system32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);Sleep(500);HWND hwnd = ::FindWindow(NULL,"计算器");ASSERT(hwnd);EnumChildWindows(hwnd, EnumChildProc, 0); //也可以使用FindWindowEx 谢谢,不过那个在程序中调用一个.BAT文件,怎么知道这个BAT文件已经执行完毕了的问题,谁帮忙给看看啊,谢谢 估计你这个窗口应该是进程下的主窗口吧,否则你首先要点开这个窗口了罗列进程窗口,找到这个窗口,找子窗口得到button的ID,然后向窗口发送WM_COMMAND,BUTTONID消息即可 就是不会在.BAT里添加发送消息什么的,谁能说的详细一点呢,谢谢 获取按钮句柄,然后SendMessage 谢谢,再来试试,我问的是怎么在.BAT里面发送消息 Cannot open source file OCCMGB.CPP vs2005 mfc开发找不到CAsyncSocket sock 什么叫容器? c/c++有没什么好的位操作的类库? 如何識別照片的清晰與模糊 listbox的问题 统计->谁研究过 SDK -> API 。 那位老大可以教我如何用TerminateProcess的方式关闭一个窗口? 请问用ADSL上网,如何判断是否在线?另外sensapi.h是什麽东西? VC新手请教: 求助关于CSocket,CSocketFile,CArchive实现服务器端和客户端的消息发送问题? cs.style |= LVS_REPORT?
FindWindow
GetWindowRect
mouse_event或者SendInput
再用FindWindowEx扫描到按钮(也就是个子窗口)
取得按钮位置,模拟鼠标动作(mouse_event)
很简单
可以用SendMessage
另:
http://www.vckbase.com/document/viewdoc/?id=771
HWND hWnd = ::FindWindow(szClass, szTitle);
HWND hWndButton = ::GetDlgItem(hWnd, nIDButton);
::SendMessage(hWnd, WM_COMMAND, nIDButton, hWndButton);
但这样做有些不好的地方,首先,被点击的程序要显示在当前窗口才行,其二精确度不是太高,响应时间也有点慢。
我做那个东西,是想利用POPO的免费短信功能来自动发送短信(比如说要是我不在电脑边,而QQ又有消息,那么就可以通过POPO转发短信)
以上是一种设想,由于我法很好的控制POPO所以还没能实现呢。
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
char buf[10]; GetWindowText(hwndChild,buf,10); if(strcmp(buf,"7") == 0) //按钮标题
{
::PostMessage(hwndChild,WM_LBUTTONDOWN,0,0);
::PostMessage(hwndChild,WM_LBUTTONUP,0,0);
}
return TRUE;
}调用代码STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
memset(&pi,0,sizeof(pi));
//创建进程
CreateProcess("c:\\windows\\system32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);Sleep(500);HWND hwnd = ::FindWindow(NULL,"计算器");ASSERT(hwnd);EnumChildWindows(hwnd, EnumChildProc, 0); //也可以使用FindWindowEx
罗列进程窗口,找到这个窗口,找子窗口得到button的ID,然后向窗口发送WM_COMMAND,BUTTONID消息即可