确定给定的窗口是否正在移动

3

基本上,我正在寻找一个IsWindowMoving(HWND) Win32 API调用。我需要知道用户当前是否正在移动窗口。

窗口不属于我,因此无法侦听WM_SYSCOMMAND / SC_MOVE或WM_MOVING(由于32/64互操作性,我不想进行子类化或挂钩)。

3个回答

5

您可以使用GetGUIThreadInfo来实现此功能 - 不需要钩子。 使用GetWindowThreadProcessId获取您的hwnd的TID,然后检查GUITHREADINFO.flags和GUITHREADINFO.hwndMoveSize以查看您的窗口是否处于移动/大小循环中。


2
如果窗口不属于您,而且您不打算偷窥消息,我认为最好的方法是获取该窗口的句柄。这将限制您使用句柄工作的任何信息功能调用。我不知道有任何这样的调用可以通知用户窗口正在移动。
您可能没有那么幸运。

1

如果您不想使用钩子、子类化或其他类似的方法,我认为轮询可能是最简单的方法。使用 GetWindowRect 您可以跟踪窗口的先前和当前位置以及大小。通过计算差值,您可以检测用户是否正在移动(甚至调整)窗口。由于您正在处理 UI,因此无需过快地轮询(即使每秒2-5次也足够了)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接