您的位置:首页 > 其它

vc程序只运行一次的判断

2009-02-25 10:58 239 查看
vc程序只运行一次的判断
方法一:
BOOL CAutoUpdateApp::InitInstance()
{
HANDLE hMap=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 128, AfxGetAppName());
if(hMap == NULL) // 如果创建失败
{
AfxMessageBox("创建用于互斥运行的内存映射文件对象失败!",
MB_OK|MB_ICONSTOP);
return FALSE;
}
else if(GetLastError() == ERROR_ALREADY_EXISTS)
{
LPVOID lpMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0);
CString str = (char)lpMem;
UnmapViewOfFile(lpMem);
CloseHandle(hMap);
str="程序已在运行!";
AfxMessageBox(str, MB_OK|MB_ICONSTOP);
return FALSE;
}
else
{
LPVOID lpMem = MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0);
//strcpy((char)lpMem, "程序正在运行!");
UnmapViewOfFile(lpMem);
CString str = (char)lpMem;
str.Format("%s/n程序开始运行!",AfxGetAppName());
AfxMessageBox(str, MB_OK|MB_ICONSTOP);
}
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CAutoUpdateDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
CloseHandle(hMap);
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

===============================
另一不太好的方法:
BOOL CCamtestApp::InitInstance()
{
if (!FirstInstance())
return FALSE; //已经有实例存在了,退出
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CCamtestDlg dlg;
m_pMainWnd = &dlg;
SetDialogBkColor(RGB(120,150,180),RGB(0,0,0));
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
BOOL CCamtestApp::FirstInstance()
{
CWnd *pWndPrev, *pWndChild;

//根据主窗口类名和主窗口名判断是否已经有实例存在了
if (pWndPrev = CWnd::FindWindow(_T("#32770"),"测试协议"))
{//如果存在就将其激活,并显示出来

pWndChild = pWndPrev->GetLastActivePopup();

//如果是最小化的就还原窗口
if (pWndPrev->IsIconic())
pWndPrev->ShowWindow(SW_RESTORE);

pWndChild->SetForegroundWindow();
//AfxGetMainWnd()->BringWindowToTop();

return FALSE;
}
else
return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: