原文
http://www.cnblogs.com/andtt/archive/2011/08/19/2146089.html
前段时间在wince上开发一个应用程序,在程序中需要调用一个第三方软件,遇到下面这个问题:
如何获得一个已经运行起来,但是仅知道进程名称,没有窗口标题,与调用程序没有特殊关系(如父子关系),并且其它条件(如是否置顶)任意的应用程序的窗口句柄????
且看:
HWND MyProc::GetXHandle(LPCWSTR procName) //procName 被调用进程名称 { DWORD iProcID=0; PROCESSENTRY32 pEntry={sizeof(PROCESSENTRY32)}; HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); if(hSnapshot!=INVALID_HANDLE_VALUE) { if(Process32First(hSnapshot,&pEntry)) { while (Process32Next(hSnapshot, &pEntry)) { if(lstrcmpi(procName, pEntry.szExeFile) == 0) { iProcID=pEntry.th32ProcessID; CloseHandle(hSnapshot); break; } } } } HWND hwnd=::GetTopWindow(NULL); while(hwnd) { DWORD pid=0; DWORD dwProcessId=GetWindowThreadProcessId(hwnd,&pid); if(dwProcessId!=0) { if(pid==iProcID) { return hwnd; } } hwnd=::GetNextWindow(hwnd,GW_HWNDNEXT); } return NULL; }