我正在实现一个小型应用程序(观察者),它需要将自身“附加”到另一个窗口(观察者)的底部。后者不是应用程序内部的窗口。
此时我通过获取窗口的 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();
关于回调,引用CallWndProc和 CWPSTRUCT :
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/