进程唯一

BOOL test::CheckProcessExist(void)
{
 HANDLE hHandle = ::CreateMutex(NULL, FALSE, "Xf0500");
 if(::GetLastError() == ERROR_ALREADY_EXISTS)
 {
  GetProcessWndHandles();
  return TRUE;
 }

 return FALSE;
}

DWORD test::GetProcessWndHandles()
{
 CString strProcessName(_T(""));
 CString strFindProcessName = "Xf0500.exe"; 
 HANDLE hProcess;
 int nRunProcessNum = 0;

 DWORD aProcessArray[1024], dwArraySize, dwProcessNum;
 unsigned int nIndex = 0;
 HMODULE hMod;
 TCHAR  aszProcessName[1024] = _T("");

 if (!::EnumProcesses(aProcessArray, sizeof(aProcessArray), &dwArraySize))
 {
  return FALSE;
 }

 dwProcessNum = dwArraySize / sizeof(DWORD);

 for (nIndex = 0; nIndex < dwProcessNum; nIndex++)
 {
  m_dwProcessId = aProcessArray[nIndex];
  hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE |PROCESS_VM_READ,FALSE, m_dwProcessId);

  if (hProcess)
  {
   if (::EnumProcessModules(hProcess, &hMod, sizeof(HMODULE),&dwArraySize))
   {
    ::GetModuleBaseName(hProcess, hMod, aszProcessName, sizeof(aszProcessName));
    strProcessName.Format(_T("%s"),aszProcessName);
    if(strProcessName.Find(strFindProcessName) >= 0)
    {
     ::EnumWindows(EnumProc, (LPARAM)this);
     return TRUE;
    }
   }
  }
 }

 return FALSE;
}

BOOL CALLBACK test::EnumProc(HWND hwnd, LPARAM lp)
{
 return ((CXf0500App*)lp)->OnEnumProc(hwnd);
}

BOOL test::OnEnumProc(HWND hwnd)
{
 DWORD dwPid;  
 HWND thwnd;  

 ::GetWindowThreadProcessId(hwnd, &dwPid); 
 if (dwPid == m_dwProcessId)  
 {  
  while((thwnd = GetParent(hwnd)) != NULL)
  {
   hwnd = thwnd;  
   break;
  }

  ::ShowWindow(hwnd, SW_NORMAL);
  ::SetForegroundWindow(hwnd);

  return FALSE;    
 }  

 return TRUE; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值