C++:全局鼠标挂钩并重置 window 的位置
C++: Global Mouse hook and reset the position of window
现在,我正在开发应用程序来重置 window 的位置。
需要注意的一件事是我使用了全局鼠标钩子来监听桌面鼠标事件。
全局鼠标挂钩运行良好。
我的问题是 SetWindowPos() 方法运行异常。
以下是我的代码:
case WM_LBUTTONUP:
mouselbut_clicked = false;
if (mousewnd_drag)
{
TRACE("mouse - lbutton release\n");
if ( window_moved )
{
::SetWindowPos(hWnd, 0, 0, 0, 500, 500, SWP_ASYNCWINDOWPOS | SWP_NOZORDER);
window_moved = false;
}
}
break;
当我构建应用程序时,window 进入桌面的左上角,但突然又回到原来的位置。
你愿意帮我解决这个问题吗?
Moving/resizing a window 导致 DefWindowProc
执行内部移动或调整大小模态循环。在操作完成之前,控件不会 return 到应用程序,并且没有记录它的确切行为和消息处理。
您是否尝试过在 SetWindowPos
之前调用 CallNextHookEx
?
作为 hack,您可以尝试延迟对 SetWindowPos
的调用,直到您的挂钩 returned(post 给自己的消息或使用工作线程)。
您也可以尝试使用不同的钩子来捕获移动操作的结尾:
现在,我正在开发应用程序来重置 window 的位置。 需要注意的一件事是我使用了全局鼠标钩子来监听桌面鼠标事件。 全局鼠标挂钩运行良好。 我的问题是 SetWindowPos() 方法运行异常。 以下是我的代码:
case WM_LBUTTONUP:
mouselbut_clicked = false;
if (mousewnd_drag)
{
TRACE("mouse - lbutton release\n");
if ( window_moved )
{
::SetWindowPos(hWnd, 0, 0, 0, 500, 500, SWP_ASYNCWINDOWPOS | SWP_NOZORDER);
window_moved = false;
}
}
break;
当我构建应用程序时,window 进入桌面的左上角,但突然又回到原来的位置。
你愿意帮我解决这个问题吗?
Moving/resizing a window 导致 DefWindowProc
执行内部移动或调整大小模态循环。在操作完成之前,控件不会 return 到应用程序,并且没有记录它的确切行为和消息处理。
您是否尝试过在 SetWindowPos
之前调用 CallNextHookEx
?
作为 hack,您可以尝试延迟对 SetWindowPos
的调用,直到您的挂钩 returned(post 给自己的消息或使用工作线程)。
您也可以尝试使用不同的钩子来捕获移动操作的结尾: