16,548
社区成员




HWND g_hWnd = NULL; // 用来保存窗口的句柄
HANDLE GetProcessHandle(DWORD dwProcessId) // 得到进程句柄
{
HANDLE hProcess = NULL;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
return hProcess;
}
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) // 枚举窗口,找到窗口句柄
{
DWORD dwId = (DWORD)lParam;
DWORD dwProcessId = 0;
GetWindowThreadProcessId(hWnd, &dwProcessId);
if(dwId == dwProcessId)
{
g_hWnd = hWnd;
return FALSE;
}
return TRUE;
}
HWND GetWindowHandle(DWORD dwProcessId) // 返回找到的窗口句柄
{
EnumWindows(EnumWindowsProc, (LPARAM)dwProcessId);
return g_hWnd;
}
// 函数调用示例
void CXXDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
TCHAR szApp[] = _T("F:\\BC.exe"); // 已知的应用程序路径
DWORD aProcesses[1024] ={0};
DWORD cbNeeded = 0;
DWORD cProcesses = 0;
if(EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
{
cProcesses = cbNeeded / sizeof(DWORD);
HANDLE hProcess = NULL;
TCHAR szPath[MAX_PATH] = {0};
for(DWORD i=0; i<cProcesses; i++)
{
DWORD dwProcessId = aProcesses[i];
if((0 != dwProcessId) && (NULL != (hProcess = GetProcessHandle(dwProcessId))))
{
GetModuleFileNameEx(hProcess, NULL, szPath, MAX_PATH);
if(0 == _tcscmp(szPath, szApp))
{
HWND hWnd = GetWindowHandle(dwProcessId);
if(hWnd)
{
if(::IsIconic(hWnd))
{
::ShowWindow(hWnd, SW_RESTORE);
}
::SetForegroundWindow(hWnd);
}
break;
}
}
}
}
}