vc程式只運行一次的判斷

來源:互聯網
上載者:User
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;                            
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.