我现在有一个主程序,他的界面上有多个可以打开的单独的可执行程序,这些程序的名称和路径都是从数据库中查出来的。我随便单击其中一个,就可以打开相应的程序,这个我实现了。
现在的要求是:
1,当有一个程序打开以后,如果再单击另外一个程序,那么在新程序打开之前,要先关闭当前打开的那个程序,如果当前的程序不允许关闭,则新程序不能打开;
2,所有的子程序,如果没有主程序开启的时候,是不允许单独运行的!也就是说,子程序需要由主程序来启动。我的问题如下:
2的解决方法,我想到了,就是给每个子程序加个启动参数,如果子程序启动的时候,没有参数或格式不正确,就自动关闭。
1问题没有想到好的方法:我的想法是:
(1)打开新的程序前,给打开的进程发送关闭程序的消息,然后等待子程序返回是否关闭的消息,如果可以关闭,子程序就自己关闭程序,然后我打开新的子程序,否则就不打开新的程序。现在问题是,不知道给哪个窗口发消息!我只知道打开的进程的exe名称。还有,我如何知道先前打开的那个exe已经关闭了?如果有更好的方法,请高手们赐教啊

解决方案 »

  1.   

    要看进程类似,不同的进程会有所差别,如果都是基于GUI的,那就发送一个WM_QUIT到主线程(CreateProcess当中可以得到).
      

  2.   

    如果主程序及子程序都是你自己写的,
    可以使用TCP/IP或UDP进行各个程序间的通讯。
      

  3.   

    请问【unsigned 】,子程序都是GUI的,不过都不是我来写,我只负责调用他们。
    那就发送一个WM_QUIT到主线程(CreateProcess当中可以得到),这个消息怎么发送,用Sendmessage方法吗?接受的窗口写谁呢?给个例子吧
      

  4.   

    建立一个内存映像文件,让各个exe共享内存数据块
      

  5.   

    子程序不是你做的那就有难度了, 但他们退出的时候肯定会有消息通知windows,主程序得把这个消息接收到
      

  6.   

    嗯,那就先解决一下目前的问题:
    如何给一个指定的进程发送关闭消息?因为我不知道哪个是它的主窗口的句柄啊,snedmessage怎么写?
      

  7.   

    CreateProcess当中有一个ProcessInformation结构,其中就有一个Thread,PostThreadMessage发送过去。
      

  8.   

    现在使用内存共享中,遇到一个问题:
    我在主程序与子程序之间使用内存共享没问题,当我在Service和exe之间使用时,内存创建可以,但是在exe中却访问被拒绝
      

  9.   

    权限问题,你可以把你的Service设置为你的登录用户来启动
      

  10.   

    是权限的问题,Service启动的用户是SYSTEM,exe的用户是当前登陆的用户。
    但是,我不能设置为当前的用户启动Service啊,这样的话,钥匙切换用户怎么办啊?
      

  11.   

    请问楼上的,我的exe是通过ShellExecute方法运行,这个函数的返回值应该是这个exe的句柄吧?我现在只知道这个句柄,如果给这个exe发送关闭程序消息?因为我不知道给哪个窗口发?
    我还要等待exe给我把消息传回来,告诉我它是关闭还是不关闭
      

  12.   

    unsingned,我个人觉得你真TMD是一个人才.每天都能看到你回复的贴子.崇拜你!
      

  13.   

    这样的牛人,在csdn上越多越好啊!
      

  14.   

    你其实就是要实现"只运行一个实例",
    学习一下
    OpenMutex, ReleaseMutex, CreateMutex
      

  15.   

    其实不用退出之前的实例,发送个消息restore一下就可以了.