我用MFC编写了一个程序app.exe,现在想在别的程序extra.exe中执行命令的方式调用该程序并传入参数自动执行,格式如app.exe xxx xxx.
这样app.exe程序执行并产生一个对话框。
现在我要在extra.exe中多次利用上述的命令方式调用app.exe并传入参数自动执行。
我想问的是我要怎么实现在多次调用的app.exe这个程序时,如果该程序已经存在就直接利用打开的,如果没有打开就创建对话框?
注意的是我想每次调用的时候都能够吧参数传给app.exe并自动执行。
我可能说的比较啰嗦,希望高人能给出具体实现的vc++的代码。谢谢。。

解决方案 »

  1.   

    建立一个可以接受参数的程序call.exe,添加如下代码:
    BOOL CCallApp::InitInstance()
    {
     int n = __argc;
     for(int i = 1 ; i < n ; i++)
      AfxMessageBox(__targv[i]);
           //__targv[0]存储的是程序的文件名
    ...
    }
      

  2.   

    可以在app.exe启动时或extra.exe中执行命令时通过FindWindow检测app.exe是否已经运行,如果找到窗口句柄,向其发送消息传递运行参数。
      

  3.   

    没有1楼说的那么简单吧,不能理解你想怎么做。。我是想可以不可以让已经运行的程序app.exe直接感知并接手并完成extra.exe调用它的工作并获得参数?不想再创建新的app.exe了。
      

  4.   

    用CreateToolhelp32snapshot,PROCESSENTRY32,Process32First,Process32Next等把那个程序找出来
      

  5.   

    这个应该比较好实现。首先保证该app.exe程序只允许一个实例。你说的应该是进程间通信问题。这个你可以采取SOCKET来通信:给个思路首先app.exe运行并开个线程启动SOCKET接收消息, 然后如果在其中调用的进程中,判断,app.exe是否已经运行,如果已经运行的话,则发送参数给app.exe, 然后app.exe在进行你想要的处理即可。
      

  6.   

    我觉得采用子进程的方式比较容易实现
    通过CreateProcess(...)函数取得进程间通信的句柄。
    然后通过CreatePipe(...)设置句柄进行通信。
    具体的可以去看看Windows核心编程 第4章进程
      

  7.   

    我觉得采用子进程的方式比较容易实现
    通过CreateProcess(...)函数取得进程间通信的句柄。
    然后通过CreatePipe(...)设置句柄进行通信。
    具体的可以去看看Windows核心编程 第4章进程
      

  8.   

    只启动一个实例,可以用Mutex等来判断的...要传递参数就需要使用进程间通信的方式,socket,pipe,消息...
      

  9.   

    if (!CreateMutex(...))
     return false;
      

  10.   

    这个问题我认为可以从两个方面考虑:1.修改app.exe让他第一次只能运行一个实例,2.修改extra.exe程序让他在运行前,先终
    止app.exe的运行,然后在重新启动app.exe