如何禁用第三方事件循环

时间:2015-11-22 16:04:16

标签: c# .net winapi hook

我使用SetWinEventHook来处理第三方操作,例如EVENT_SYSTEM_MINIMIZESTART事件。

如何防止此应用最小化?我的意思是我需要像WinForms e.Cancel = true;

这样的东西

它是如何工作的:第三方应用程序正在最小化,我的应用程序捕获此操作,取消它,然后询问Do you really want to minimize %appname%?,然后使用SendMessage将其最小化,如果用户单击Yes按钮。 这是HookCreation:

    public Hook(IntPtr hWnd)
    {
        lpfnWinEventProc = WinEvent;
        handle = GCHandle.Alloc(lpfnWinEventProc);
        pHook = SetWinEventHook((uint)SystemEvents.EVENT_MIN,
                                (uint)SystemEvents.EVENT_MAX,
                                hWnd,
                                lpfnWinEventProc,
                                0,
                                0,
                                WINEVENT_OUTOFCONTEXT
            );
        if (IntPtr.Zero.Equals(pHook))
            throw new Win32Exception();
    }

1 个答案:

答案 0 :(得分:2)

允许您过滤邮件的唯一hookCBT Hook。如果通过此挂钩报告的操作列表不足,您可以通过安装GetMsgProc挂钩找到解决方案。这允许您修改消息。使用WM_NULL消息替换适当的传入消息与取消消息基本相同。这仅适用于发布到消息队列的消息。发送的邮件不会通过此挂钩过滤。