You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需Hook哪个WINAPI可阻止Chrome经PostMessage点击时被激活?

Hook PostMessage发送Chrome点击事件时阻止窗口激活的问题

我正在使用EasyHook对google chrome进行Hook,目标是通过PostMessage向Chrome发送点击事件时阻止窗口被激活。
我已经Hook了WM_WINDOWPOSCHANGING消息,尝试强制移除SWP_NOACTIVATE | SWP_NOZORDER标志,但发送如下点击代码时,窗口仍然会被激活:

lParam = MAKELPARAM(x, y);
PostMessageW(hWnd, WM_LBUTTONDOWN, 0x0001, lParam);
PostMessageW(hWnd, WM_LBUTTONUP, 0, lParam);

我已经确认Hook本身运行正常,问题核心是需要找到正确的可Hook/拦截的WINAPI接口。
当前Hook实现代码如下:

typedef LRESULT __stdcall DefDlgProcWFunc(HWND, UINT, WPARAM, LPARAM);

// 最内层Hook处理函数
LRESULT __stdcall DefDlgProcW_Hook(HWND   hWnd, UINT   Msg, WPARAM wParam, LPARAM lParam)
{
    DefWindowProcW_Msg(hWnd, Msg, wParam, lParam, 1);

    // 最内层Hook直接调用原始函数
    return DefDlgProcW(hWnd, Msg, wParam, lParam);
}



void DefWindowProcW_Msg(HWND hWnd, UINT& Msg, WPARAM& wParam, LPARAM& lParam, int CalledByFunction)
{
    if (!hooks_enabled)
        return;

    std::wstringstream str;

    HWND hwnd = nullptr;
    HWND hwndInsertAfter = nullptr;
    tagWINDOWPOS* wp;
    int x;
    int y;
    int cx;
    int cy;
    UINT flags;

    switch (Msg)
    {
        case WM_WINDOWPOSCHANGING:
        {
            wp = reinterpret_cast<tagWINDOWPOS*>(lParam);
            hwnd = wp->hwnd;
            hwndInsertAfter = wp->hwndInsertAfter;
            x = wp->x;
            y = wp->y;
            cx = wp->cx;
            cy = wp->cy;
            flags = wp->flags;


            HWND hWnd2 = FindWindow(0, L"New Tab - Google Chrome");

            str << L"\nWM_WINDOWPOSCHANGING"
                << L"\nx:                   " << x  << L"        y:        " << y
                << L"\nw:                   " << cx << L"        h:        " << cy
                << L"\nhwnd:                " << hwnd
                << L"\nflags:               " << flags
                << L"\n";
            OutputDebugString(str.str().c_str());

            if (hWnd == hWnd2) {
                OutputDebugString(L"CHROME!!!!\n");
                wp->flags &= ~(SWP_NOACTIVATE | SWP_NOZORDER);
                return;
            }

            return;
        }
    }
}

已测试的方案及缺陷

  • 调用LockSetForegroundWindow方案:可以实现效果,但必须在发送消息前后分别执行加锁/解锁操作,加锁状态下点击任务栏无法激活任何窗口,副作用明显。
  • SetWinEventHook监听EVENT_SYSTEM_FOREGROUND事件方案:完全无效,事件触发时窗口已经完成前台切换,没有拦截时机。
  • Hook SetForegroundWindow:Chrome激活窗口时并未调用该接口,Hook不生效。

发送PostMessage点击后触发的所有窗口消息已做全量日志记录,日志覆盖了点击操作触发的全部窗口消息流程。

实现约束

仅通过PostMessage实现需求,不使用UI Automation/JavaScript相关方案。


内容的提问来源于stack exchange,提问作者Cesar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:21:36