怎么能够实现,启动一个程序,然后模拟点击这个程序界面中的某个BUTTON,非常棘手,请大家帮忙,谢谢!

VCILOVE 2005-07-01 08:32:29
怎么能够实现,启动一个程序,然后模拟点击这个程序界面中的某个BUTTON,非常棘手,请大家帮忙,谢谢!
现在只知道这个EXE的名字,知道BUTTON的名字,知道这个EXE启动后窗口的名字,其他的都不知道,请问该怎么实现,谢谢!
急用啊!
luckytigerwood@yahoo.com.cn
...全文
236 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky 2005-12-15
  • 打赏
  • 举报
回复
嗯,可能我也会用到,记一下。
VCILOVE 2005-07-04
  • 打赏
  • 举报
回复
谢谢,再来试试,我问的是怎么在.BAT里面发送消息
oyljerry 2005-07-02
  • 打赏
  • 举报
回复
可以自己设定执行完了发送一个消息什么的
ggg82 2005-07-02
  • 打赏
  • 举报
回复
估计你这个窗口应该是进程下的主窗口吧,否则你首先要点开这个窗口了
罗列进程窗口,找到这个窗口,找子窗口得到button的ID,然后向窗口发送WM_COMMAND,BUTTONID消息即可
洋溢2016 2005-07-02
  • 打赏
  • 举报
回复
酷!
kugou123 2005-07-02
  • 打赏
  • 举报
回复
获取按钮句柄,然后SendMessage
VCILOVE 2005-07-02
  • 打赏
  • 举报
回复
谢谢,不过那个在程序中调用一个.BAT文件,怎么知道这个BAT文件已经执行完毕了的问题,谁帮忙给看看啊,谢谢
VCILOVE 2005-07-02
  • 打赏
  • 举报
回复
就是不会在.BAT里添加发送消息什么的,谁能说的详细一点呢,谢谢
xing_xing_xing 2005-07-01
  • 打赏
  • 举报
回复
//枚举子窗口
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
anyuecq25 2005-07-01
  • 打赏
  • 举报
回复
我曾经做了个点击POPO的程序,但是他那个窗口不是常用的窗口类生成的,用上面的FindWindow GetDlgItem之类的方法得不到他的HWND ,也就没有办法发消息了,最后只能把用上面说的mouse_event方法,自己测算按钮的位置,再点击。
但这样做有些不好的地方,首先,被点击的程序要显示在当前窗口才行,其二精确度不是太高,响应时间也有点慢。
我做那个东西,是想利用POPO的免费短信功能来自动发送短信(比如说要是我不在电脑边,而QQ又有消息,那么就可以通过POPO转发短信)
以上是一种设想,由于我法很好的控制POPO所以还没能实现呢。
poooorgun 2005-07-01
  • 打赏
  • 举报
回复
知道按钮位置就好办,用mouse_event
p4apple 2005-07-01
  • 打赏
  • 举报
回复
你就写个小程序,打开,释放一个固定名称的互赤体,然后把他加到。bat总,你的程序就监测互斥体好了
goodboyws 2005-07-01
  • 打赏
  • 举报
回复
需要知道窗口的类名及标题名称和按钮的ID,这些都可以用SPY++得到。
HWND hWnd = ::FindWindow(szClass, szTitle);
HWND hWndButton = ::GetDlgItem(hWnd, nIDButton);
::SendMessage(hWnd, WM_COMMAND, nIDButton, hWndButton);
VCILOVE 2005-07-01
  • 打赏
  • 举报
回复
还有一个小问题,在程序中调用一个.BAT文件,怎么知道这个BAT文件已经执行完毕了呢,谢谢!
sinall 2005-07-01
  • 打赏
  • 举报
回复
补充楼上,
可以用SendMessage
另:
http://www.vckbase.com/document/viewdoc/?id=771
xiao_xiao_zi 2005-07-01
  • 打赏
  • 举报
回复
先用FindWindow扫描到这个窗口
再用FindWindowEx扫描到按钮(也就是个子窗口)
取得按钮位置,模拟鼠标动作(mouse_event)
很简单
xiaqq 2005-07-01
  • 打赏
  • 举报
回复
CreateProcess
FindWindow
GetWindowRect
mouse_event或者SendInput
VCILOVE 2005-07-01
  • 打赏
  • 举报
回复
谢谢,有没有源码什么的,呵呵,
我会去试以试的

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧