查找窗口的几种方法

来源:互联网 发布:打字员软件 编辑:程序博客网 时间:2024/05/25 05:37

1.根据窗进程的ID来查找


//枚举窗口BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam){    LPWNDINFO pInfo = (LPWNDINFO)lParam;    DWORD dwProcessId = 0;    GetWindowThreadProcessId(hWnd, &dwProcessId);    if(dwProcessId == pInfo->dwProcessId)    {        ShowWindow(hWnd,SW_SHOW);    }    return TRUE;}void ShowWindowByProcessID(DWORD dwProcessId){if(dwProcessId == 0) return ;    WNDINFO wi;   wi.dwProcessId = dwProcessId;   wi.hWnd = NULL;    EnumWindows(EnumWindowsProc,(LPARAM)&wi);    return 0;}

2.根据运行程序的名称来查找(如:explorer.exe


//枚举窗口BOOL CALLBACK EnumWindowsProc2(HWND hWnd,LPARAM lParam){DWORD pid;DWORD dwProcessId=GetWindowThreadProcessId(hWnd,&pid);if(dwProcessId!=0){if(pid==lParam){::ShowWindow(hWnd,SW_SHOW);}}return TRUE;}//根据程序文件名获取进程IDGetPIDFromName(LPCTSTR 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;}}}    }return iProcID;}void ShowWindowByEXEName(LPCTSTR exeName){  DWORD pID=GetPIDFromName(exeName);if(pID!=0){EnumWindows(EnumWindowsProc2,pID);  }}