C ++:Global Mouse挂钩并重置窗口的位置

时间:2017-08-29 13:37:54

标签: c++ winapi mouse-hook window-position

现在,我正在开发应用程序以重置窗口的位置。 需要注意的一点是,我使用全局鼠标钩来监听桌面鼠标事件。 Global Mouse钩子运行良好。 我的问题是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;

当我构建应用程序时,窗口会进入桌面的左上角,但突然之间,它会回到原来的位置。

您是否愿意帮助我解决此问题?

1 个答案:

答案 0 :(得分:0)

移动/调整窗口大小会导致DefWindowProc执行内部移动或大小调整模式循环。在操作完成之前,控件不会返回到应用程序,并且没有记录它的确切行为和消息处理。

您是否尝试在CallNextHookEx之前致电SetWindowPos

作为一个黑客,您可以尝试将您的呼叫延迟到SetWindowPos,直到您的钩子返回后(向您自己发送消息或使用工作线程)。

你也可以尝试使用不同的钩子来捕捉移动操作的结束: