C++Builder 程序员博客
2 Sep
如何使用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还在起作用呀!不知道有没有其它的方法.
//试试这个,你那个看着有点乱,改了改,看是否合适 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被版主删除