大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说通过进程句柄获取窗口句柄_如何查看进程id,希望能够帮助大家进步!!!
通过Windows进程ID获取窗口句柄 方法一:使用EnumWindows的方式
此代码由Java架构师必看网-架构君整理 ///< 枚举窗口参数 typedef struct HWND hwndWindow; // 窗口句柄 DWORD dwProcessID; // 进程ID }EnumWindowsArg; ///< 枚举窗口回调函数 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) EnumWindowsArg *pArg = (EnumWindowsArg *)lParam; DWORD dwProcessID = 0; // 通过窗口句柄取得进程ID ::GetWindowThreadProcessId(hwnd, &dwProcessID); if (dwProcessID == pArg->dwProcessID) pArg->hwndWindow = hwnd; // 找到了返回FALSE return FALSE; // 没找到,继续找,返回TRUE return TRUE; ///< 通过进程ID获取窗口句柄 HWND CProcessTimeRestart::GetWindowHwndByPID(DWORD dwProcessID) HWND hwndRet = NULL; EnumWindowsArg ewa; ewa.dwProcessID = dwProcessID; ewa.hwndWindow = NULL; EnumWindows(EnumWindowsProc, (LPARAM)&ewa); if (ewa.hwndWindow) hwndRet = ewa.hwndWindow; return hwndRet; }
方法二:使用GetTopWindow和GetNextWindow的方式
///< 枚举窗口参数 typedef struct HWND hwndWindow; // 窗口句柄 DWORD dwProcessID; // 进程ID }EnumWindowsArg; ///< 枚举窗口回调函数 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) EnumWindowsArg *pArg = (EnumWindowsArg *)lParam; DWORD dwProcessID = 0; // 通过窗口句柄取得进程ID ::GetWindowThreadProcessId(hwnd, &dwProcessID); if (dwProcessID == pArg->dwProcessID) pArg->hwndWindow = hwnd; // 找到了返回FALSE return FALSE; // 没找到,继续找,返回TRUE return TRUE; ///< 通过进程ID获取窗口句柄 HWND CProcessTimeRestart::GetWindowHwndByPID(DWORD dwProcessID) HWND hwndRet = NULL; EnumWindowsArg ewa; ewa.dwProcessID = dwProcessID; ewa.hwndWindow = NULL; EnumWindows(EnumWindowsProc, (LPARAM)&ewa); if (ewa.hwndWindow)