VC++防止重复运行同一个程序
通过事件对象来实现:HANDLE hEvent=CreateEvent(NULL,FALSE,FALSE,"OneEvent");
if(hEvent)
{
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
::AfxMessageBox(_T("已有程序在运行!"));
return FALSE;
}
}
或在App::InitInstance()中加入
CreateMutex(NULL, true ,m_pszAppName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox(_T( "应用程序不可以重复启动" ),MB_OK | MB_APPLMODAL |MB_ICONSTOP);
return ( false );
}或///////////////////////////////<防止重复运行>///////////////////////////////////////////////
CString lpszName="proj Test"; //窗口的标题
HANDLE hMutex = NULL;
hMutex = ::OpenMutex(MUTEX_ALL_ACCESS,TRUE,lpszName);
if(hMutex)
{
CWnd *pWnd=CWnd::FindWindow(NULL,lpszName);//目标进程的窗口的captain
if(pWnd)
{
if (para=="exit")
pWnd->SendMessage(WM_MYMESSAGE_stop, NULL, NULL); //给旧进程发送消息
else{
MessageBox(NULL, "您已经启动程序 ! ", "提示 ",MB_ICONINFORMATION);
}
//MessageBox(NULL,"找到窗口","提示",MB_ICONINFORMATION);
} else{
MessageBox(NULL, "您已经启动程序 ! ", "提示 ",MB_ICONINFORMATION);
}
return FALSE;
}
hMutex = ::CreateMutex(NULL,TRUE,lpszName);
///////////////////////////////</防止重复运行>///////////////////////////////////////////////
一些软件在重复启动时会自动激活已启动的窗口,I want to know something that can give the force to my old process Xor 发表于 2012-1-8 19:34 static/image/common/back.gif
一些软件在重复启动时会自动激活已启动的窗口,I want to know something that can give the force to my o ...
这个简单了,直接FindWindow + SendMessage即可。
在我的MicroMusicPlayer里就是用的这种办法。 Xor 发表于 2012-1-8 19:34 static/image/common/back.gif
一些软件在重复启动时会自动激活已启动的窗口,I want to know something that can give the force to my o ...
还有一招,就是调用BroadcastSystemMessage广播一条你自己的特殊消息,然后你在子类化里收这个消息.
如果收到这消息,就说明有个实例已启动,并且在查询是否已有实例,那就返回个值让它知道已有实例了并退出.
同时还可以让自己激活一下. 互斥体。。。学习了
页:
[1]