如何使用ShellExecute调用外部程序, 只能运行一次,再次调用时,显示已经调用过的窗口.
HANDLE mutex ;
    const char mutexname [] = "EEGSysSet" ;
    mutex = OpenMutex (0, false, mutexname) ;//
    if (mutex == NULL)
    {
        mutex = CreateMutex(0,1,mutexname);
        if(!ERROR_ALREADY_EXISTS == ::GetLastError())
        {
            AnsiString          ans;
            ans.sprintf("%s\\EEGSysSet.exe", CDBIN);
            ShellExecute(NULL, "", ans.c_str(), "EEGSys", CDBIN, SW_MAXIMIZE);
        }
    }
    else
    {
        ShowMessage ("Application Already Running") ;
    } *
使用以上程序,创建CreateMutex,第二次调用的时候确实没有启动,但是,如果第一次调用的已经关闭了,再次调用的时候就没有反应了,等于CreateMutex还在起作用呀!不知道有没有其它的方法.

C/C++ code
//试试这个,你那个看着有点乱,改了改,看是否合适 HANDLE mutex ; const char mutexname [] = "EEGSysSet" ; mutex = CreateMutex(0,1,mutexname); if(!ERROR_ALREADY_EXISTS == ::GetLastError()|| mutex == NULL) { MessageBox(0,"您已经起动了本程序!","提醒:禁止多次运行。",MB_OK); return ; } ShellExecute(NULL, "", ans.c_str(), "EEGSys", CDBIN, SW_MAXIMIZE);

HANDLE mutex ;
是个全局的,你有没有注销这个 HANDLE 。

你程序只能对自己本事多次调用起到作用,但是对于外界关闭程序,并没有促使你释放信号量,所以不可以!

up

该回复于2008-07-10 02:38:26被版主删除

该回复于2008-07-10 02:47:04被版主删除