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);