我使用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();
}
答案 0 :(得分:2)
允许您过滤邮件的唯一hook是CBT Hook。如果通过此挂钩报告的操作列表不足,您可以通过安装GetMsgProc挂钩找到解决方案。这允许您修改消息。使用WM_NULL
消息替换适当的传入消息与取消消息基本相同。这仅适用于发布到消息队列的消息。发送的邮件不会通过此挂钩过滤。