如何做一个程序(最好是MFC程序),让它运行另一个程序,并可以模仿鼠标点击那个程序中的某个子菜单下的选项(使其响应)?

解决方案 »

  1.   

    监控程序是不是mfc都没有关系,具体实现步骤如下:
    1。FindWindow找到要控制的程序
    2。EnumChildWindows枚举主窗口上的所有控件
    3。如果找到了,发送各种消息进行控制,如 ::SendMessage(tempHwnd02, BM_CLICK, NULL, NULL);tempHwnd02是自控件句柄,BM_CLICK是消息
    4. 循环找并处理
      

  2.   

    还有一种方法就是用widows batch编程了,我用过一个软件自动测试工具集,用batch编程可以实现对系统程序的一切操作,像安装卸载office什么的都可以自动进行。
      

  3.   

    他要的是用一个进程运行另一个进程,用CreateProcess函数吧。。
      

  4.   

    这个已经说的很好的,我都是发送WM_MOUSEDOWN和WM_MOUSEUP的,没试过BM_CLICK
      

  5.   

    直接发送WM_COMMAND命令不行么?
      

  6.   

    唉,算了吧、我给你写了个例子,自己下下去研究吧
    http://www.brsbox.com/filebox/down/fc/6ce645d355b9a983dfded3753ee29b23
      

  7.   

    1 sendmessage或者Postmessage
    2 #include <Windows.h>
    #include <iostream>
    using namespace std;int main()
    {
    WinExec( "C:\\WINDOWS\\NOTEPAD.EXE", SW_SHOW);
    cout<< "我的功能是运行一个记事本." <<endl;
    return 0;

    3C++程序中调用exe可执行文件
    system函数和execl、execv函数不能控制程序窗口是否显示,我要的效果是不显示该exe程序的窗口,所以这两种方法不予考虑。 WinExec函数不好控制主程序来等该exe程序的结束,所以放弃。CreateProcess函数是新建一个进程,所以,你必须人为地控制该进程的生死,不如ShellExecuteEx方便,所以最终我选择的是ShellExecuteEx函数。程序如下:SHELLEXECUTEINFO  ShExecInfo  =  {0}; 
     ShExecInfo.cbSize  =  sizeof(SHELLEXECUTEINFO); 
     ShExecInfo.fMask  =  SEE_MASK_NOCLOSEPROCESS; 
     ShExecInfo.hwnd  =  NULL; 
     ShExecInfo.lpVerb  =  _T("open"); 
     ShExecInfo.lpFile  =  _T("c4.5.exe");                         
     ShExecInfo.lpParameters  =  _T("-f train");             
     ShExecInfo.lpDirectory  =  NULL; 
     ShExecInfo.nShow  =  SW_HIDE; 
     ShExecInfo.hInstApp  =  NULL;             
     ShellExecuteEx(&ShExecInfo);
     WaitCursorBegin();
     WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
     WaitCursorEnd();