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