//找到当前已经打开的程序实例

HWND hWnd=NULL;
HANDLE h = GetProp(hWnd,"Your Program Name");
if(hWnd!=NULL)
{
    AfxMessageBox("该程序已经运行了!");
    ::ShowWindow(hWnd,SW_SHOWNORMAL); //激活找到的前一个程序
     ::SetForegroundWindow(hWnd); 
}

 


::Initinstance()
{
  if(OpenMutes(MUTEX_ALL_ACCESS,TRUE,"ABCDEFGH"))
     return false;//返回FALSE 直接推出程序自动
  CreateMutex(NULL,TRUE,"ABCDEFGH"); //创建 别的程序就无法启动了
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=492172


例2:

int WINAPI WinMain(HINSTANCE hInstance,  
       HINSTANCE hPrevInstance, 
       LPSTR  lpCmdLine,  
       int   nCmdShow)  
{
 HANDLE  hMutex;
 WNDCLASSEX wcex;
 MSG   msg;
 long  top, left;
 char  strmsg[256];

 unsigned long BackupSerial;

 //---------------------------------------------------------------
 // 2重起動防止
 hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, DATA_GUARD_MUTEX);
 if(hMutex)
 {
  //if(lpCmdLine)
  // DebugOut("WinMain - lpCmdLine = %s", lpCmdLine);

  EnumWindows(&FindWindowProc, (LPARAM)lpCmdLine);

   CloseHandle(hMutex);
  return FALSE;
 }
 hMutex = CreateMutex(NULL, TRUE, DATA_GUARD_MUTEX);

 。。。。。。

}

BOOL CALLBACK FindWindowProc(HWND hWnd, LPARAM lParam)
{
 if(GetProp(hWnd, DATA_GUARD_WND))
 {
  if(lParam)
  {
   COPYDATASTRUCT cds;
   memset(&cds, 0, sizeof(COPYDATASTRUCT));

   char * pCmd;
   pCmd = (char*)lParam;

   DebugOut("FindWindowProc - WM_COPYDATA = %s", pCmd);

   cds.cbData = strlen(pCmd) + 1; 
   cds.lpData = (PVOID)pCmd;   

   SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
  }

  SetForegroundWindow(hWnd);
  ShowWindow(hWnd, SW_SHOW);

  return FALSE; 
 }
 return TRUE;  
}


 //---------------------------------------------------------------
 // インスタンスの保存
 g_hInst = hInstance;

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3