Windows判断当前鼠标拖拽窗口

背景

在Windows中,获取当前鼠标拖动的窗口

Windows API

BOOL GetGUIThreadInfo(
  [in]      DWORD          idThread,
  [in, out] PGUITHREADINFO pgui
);

https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-getguithreadinfo

代码

GUITHREADINFO info = { 0 };
info.cbSize = sizeof(GUITHREADINFO);
if (GetGUIThreadInfo(NULL, &info)) {
	// 获取前台线程的信息
	printf("state: %d", info.flags);
	if ((info.flags & GUI_INMOVESIZE))//正在拖拽窗口中
	{
		printf("GUI_INMOVESIZE: %p", info.hwndMoveSize);
	}
	// 可以进一步使用窗口句柄,例如获取窗口标题等
	char windowTitle[256];
	GetWindowTextA(info.hwndMoveSize, windowTitle, sizeof(windowTitle));
	RECT rect{};
	DwmGetWindowAttribute(info.hwndMoveSize, DWMWA_EXTENDED_FRAME_BOUNDS, &rect,
		sizeof(rect));
	DWORD pid = 0;
	GetWindowThreadProcessId(info.hwndMoveSize, &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(info.hwndMoveSize, GWL_EXSTYLE);
	LONG windowStyle = GetWindowLong(info.hwndMoveSize, GWL_STYLE);
	printf("stype: %x, exstyle: %x, visible: %d", windowStyle, windowStyleEx, IsWindowVisible(info.hwndMoveSize));
	printf("left: %ld, top: %ld, width: %ld, height: %ld",
		rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
	}
posted @ 2024-10-17 14:17  main_c  阅读(0)  评论(0)    收藏  举报  来源