c# - 在 C# 中监听另一个窗口调整大小事件

标签 c# resize hook

我正在实现一个小型应用程序(观察者),它需要将自身“附加”到另一个窗口(观察者)的底部。后者不是应用程序内部的窗口。

此时我通过获取窗口的 hWnd 并在线程中定期查询观察窗口的位置,相应地移动观察窗口来解决。

然而,这是一个非常不优雅的解决方案。我想做的是监听被观察窗口的调整大小事件,以便观察者仅在必要时使用react。

我想我应该使用一个钩子(Hook),而且我找到了很多方法,但是我对 C WinAPI 的了解不足使我无法理解我需要创建哪个钩子(Hook)以及如何创建(pinvoke/参数/等) .

我很确定这很简单,一些熟悉 C/C++ 和 WinAPI 的人会手头有答案;)

谢谢

最佳答案

扩展 Chris Taylor 的回答:您可以使用 ManagedWinApi 而不是自己进行 native 互操作。 ,其中包含一个 Hook 类。

编辑:使用 ManagedWinApi。代码中的某处:

Hook MyHook = new Hook(HookType.WH_CALLWNDPROC, false, false);
MyHook.Callback += MyHookCallback;
MyHook StartHook();

关于回调,引用CallWndProcCWPSTRUCT :

private static int MyHookCallback(int code, IntPtr wParam, IntPtr lParam, ref bool callNext)
{
    if (code >= 0)
    {
        // You will need to define the struct
        var message = (CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT));
        // Do something with the data
    }
    return 0; // Return value is ignored unless you set callNext to false
}

关于c# - 在 C# 中监听另一个窗口调整大小事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880160/

相关文章:

c# - Paypal 更改默认货币

c# - Redis过期不起作用

java - 将单独的组件锚定在 JFrame 中

git - 从 Makefile 跟踪分支更改

visual-c++ - Hook Windows API 函数以拦截 dll 加载(仅限 Windows)

c# - C# smtp.gmail.com 和端口号 587 中目标主机拒绝发送电子邮件

c# - 资源字典中的元素已经是另一个元素的子元素?

java - 如何使 JTextField 的宽度静态?

c++ - vector 调整大小奇怪的行为

node.js - Postgre 的 BeforeCreate 钩子(Hook)不使用 bcryptjs 对密码进行哈希处理