在你的程序的初始化时,首先去 打开一个互斥(一个你自己创建的互斥),如果互斥不存在,就可以认为是程序第一次运行,如果互斥存在,就认为此次运行时第二个实例,这是不让第二个程序显示,将第一个程序的实例显示为当前窗口,祥见如下的代码:
BOOL CIHISSERVERApp::InitInstance()
{
....
/*--------------------------------------*/
CString mutexname = "oncemutex ";
myMutex = ::OpenMutex(MUTEX_ALL_ACCESS,FALSE,mutexname);
if(myMutex == NULL )
{
myMutex = ::CreateMutex(NULL,TRUE,mutexname);
}
else
{
HWND mainHandle = ::FindWindow(NULL, "IHIS安防报警服务器 ");
if ( !mainHandle )
{
AfxMessageBox( "没有发现窗口 ");
}
SetForegroundWindow( mainHandle );
ShowWindow(mainHandle,SW_SHOWMAXIMIZED);
// 当第一个程序最小话到任务栏时,消除任务栏的图彪
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = mainHandle;
nid.uID = IDR_MAINFRAME;
nid.uFlags = 0;
Shell_NotifyIcon(NIM_DELETE,&nid);
return false;
}
/*--------------------------------------*/
}
BOOL CIHISSERVERApp::InitInstance()
{
....
/*--------------------------------------*/
CString mutexname = "oncemutex ";
myMutex = ::OpenMutex(MUTEX_ALL_ACCESS,FALSE,mutexname);
if(myMutex == NULL )
{
myMutex = ::CreateMutex(NULL,TRUE,mutexname);
}
else
{
HWND mainHandle = ::FindWindow(NULL, "IHIS安防报警服务器 ");
if ( !mainHandle )
{
AfxMessageBox( "没有发现窗口 ");
}
SetForegroundWindow( mainHandle );
ShowWindow(mainHandle,SW_SHOWMAXIMIZED);
// 当第一个程序最小话到任务栏时,消除任务栏的图彪
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = mainHandle;
nid.uID = IDR_MAINFRAME;
nid.uFlags = 0;
Shell_NotifyIcon(NIM_DELETE,&nid);
return false;
}
/*--------------------------------------*/
}