【发布时间】:2018-11-10 00:18:45
【问题描述】:
我目前正在开发一个程序,该程序使用的功能应该在其他进程的窗口最大化/最大化时提醒我。对于最大化事件,我的意思是按下右上角关闭按钮旁边的符号。
为此,我使用了SetWinEventHook 函数。问题是我找不到正确的事件代码来捕捉这个事件。我尝试了EVENT_SYSTEM_MOVESIZESTART, EVENT_SYSTEM_MOVESIZEEND, EVENT_SYSTEM_MINIMIZESTART and EVENT_SYSTEM_MINIMIZEEND 常量,但它们似乎都没有触发最大化事件。但是,我可以跟踪其他事件,因此我的 SetWinEventHook 实现正在运行。
有没有人知道如何从其他进程中捕获最大化事件?
提前致谢。
带着友好的问候, 鲍勃
代码示例:
// To catch the event
SetWinEventHook(EVENT_MIN, EVENT_MAX, IntPtr.Zero, new WinEventDelegate(WinEventProc), GetProcess(), 0, 0);
// The handler
private void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
// TODO: Filter maximize event here
if (eventType == ?)
{
// Do something
}
}
【问题讨论】:
-
`SetWindowsHookEx' 有什么用?
-
您可以等待调整大小事件,然后检查它是否填满整个屏幕?
-
必须有更好的方法,但 CBT 钩子可以解决这个问题。
-
谢谢克里斯,我会调查的!
-
@chris 看看什么?有什么更好的方法!?