您的位置:首页 > 其它

vc程序只运行一次的判断——20100723

2010-07-23 16:11 211 查看
在工程下对应的app类中的InitInstance函数加入下列代码即可(红色部分为加入代码):
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;
}

vc6.0下测试通过,可以放心使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: