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

浙公网安备 33010602011771号