【问题标题】:Blocking background applications from receiving messages阻止后台应用程序接收消息
【发布时间】:2019-09-11 05:32:49
【问题描述】:

我试图阻止后台应用程序接收鼠标事件。尽管确保消息目标的句柄与前台窗口匹配,但如果我将鼠标悬停在后台应用程序上,它仍会收到我的鼠标事件。

我也尝试过挂钩 WH_MOUSE_LL,但 MSLLHOOKSTRUCT 似乎没有提供足够的信息来过滤它们。

MSG msg = {0};
while(GetMessage(&msg, reinterpret_cast<HWND>(-1), 0, 0) > 0)
{
    if (msg.hwnd == GetForegroundWindow())
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

我希望后台窗口只要在后台就不会收到任何事件。

【问题讨论】:

  • GetMessage 只会将消息返回到当前线程中的窗口。它不能用于拦截发往另一个进程的消息。

标签: c++ winapi message-queue


【解决方案1】:

特别是对于鼠标消息,有一个解决方案。

前台窗口可以调用SetCapture,然后所有后续的鼠标消息都会传递给它,即使超出了它的边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    相关资源
    最近更新 更多