获取当前鼠标区域的窗口句柄

背景

获取当前鼠标所在的窗口

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.");
	}

Linux实现

Linux API

代码

posted @ 2024-10-17 13:23  main_c  阅读(1)  评论(0)    收藏  举报  来源