gpt4 book ai didi

c# - SetWinEventHook 窗口最大化事件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:18 24 4
gpt4 key购买 nike

我目前正在开发一个程序,该程序使用的功能应该在其他进程的窗口最大化/最大化时提醒我。对于最大化事件,我的意思是按下右上角关闭按钮旁边的符号。

为此,我使用了 SetWinEventHook功能。问题是我找不到正确的事件代码来捕捉这个事件。我尝试了 EVENT_SYSTEM_MOVESIZESTART、EVENT_SYSTEM_MOVESIZEEND、EVENT_SYSTEM_MINIMIZESTART 和 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
}
}

最佳答案

SetWinEventHook() 的回调中,处理 EVENT_OBJECT_LOCATIONCHANGE事件并通过调用 GetWindowPlacement() 检查窗口是否处于最大化状态函数并将其第二个参数的 showCmd 属性与 SW_SHOWMAXIMIZED 进行比较常量。

C++ 示例:

void CALLBACK exampleHook(HWINEVENTHOOK hook, DWORD event, HWND hWnd,
LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
if (EVENT_OBJECT_LOCATIONCHANGE == event) {
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
GetWindowPlacement(hWnd, &wp);

if (SW_SHOWMAXIMIZED == wp.showCmd) {
// Window is maximized.
}
}
}

Fwiw,我在我的 ExplorerHiDpiFix 中使用了这种方法效用。

关于c# - SetWinEventHook 窗口最大化事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com