获取当前鼠标区域的窗口句柄
背景
获取当前鼠标所在的窗口
Windows实现
windows API
HWND WindowFromPoint(
[in] POINT Point
);
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-windowfrompoint
代码
// 鼠标坐标
POINT pt;
// 获取当前鼠标位置
GetCursorPos(&pt);
// 获取鼠标所在位置的窗口句柄
HWND pHwnd = WindowFromPoint(pt);
if (pHwnd) {
printf("Window handle : %p", pHwnd);
// 获取窗口标题等
char windowTitle[256];
GetWindowTextA(pHwnd, windowTitle, sizeof(windowTitle));
RECT rect{};
DwmGetWindowAttribute(pHwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rect,
sizeof(rect));
DWORD pid = 0;
GetWindowThreadProcessId(pHwnd, &pid);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
char exeName[256] = { 0 };
GetModuleFileNameExA((HMODULE)hProc, NULL, exeName, sizeof(exeName));
CloseHandle(hProc);
printf("pid: %d, exeName: %s, Window title: %s", pid, exeName, windowTitle);
LONG windowStyleEx = GetWindowLong(pHwnd, GWL_EXSTYLE);
LONG windowStyle = GetWindowLong(pHwnd, GWL_STYLE);
printf("stype: %x, exstyle: %x, visible: %d", windowStyle, windowStyleEx, IsWindowVisible(pHwnd));
printf("left: %ld, top: %ld, width: %ld, height: %ld",
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
}
else {
printf("No window under the cursor.");
}

浙公网安备 33010602011771号