C# 窗口过程消息处理 WndProc
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:36
(hook, removedHandler));
}
public void RemoveHookProc(HookProc hook)
{
if (hooks != null)
{
for (int i = hooks.Count - 1; i >= 0; i--)
{
if (hooks[i].Key == hook)
{
hooks[i].Value?.Invoke();
hooks.RemoveAt(i);
}
}
}
}
protected override void WndProc(ref Message m)
{
if (hooks != null)
{
foreach (var hook in hooks)
{
if (hook.Key(ref m)) return;
}
const int WM_NCDESTORY = 0x0082;
if (m.Msg == WM_NCDESTROY) // 窗口销毁时移除所有 hook
{
for (int i = hooks.Count - 1; i >= 0; i--)
{
hooks[i].Value?.Invoke();
}
hooks = null;
}
base.WndProc(ref m);
}
}
}
///
/// <param name="handle"/>需要附加消息处理过程的窗口句柄
/// <param name="hook"/>消息处理过程
/// <param name="removedHandler"/>消息处理过程移除回调
public static void AddHook(IntPtr handle, HookProc hook, Action removedHandler = null)
{
if (!(NativeWindow.FromHandle(handle) is HookWindow window))
{
window = new HookWindow(handle);
}
window.AddHookProc(hook, removedHandler);
}
///
/// <param name="handle"/>需要移除消息处理过程的窗口句柄
/// <param name="hook"/>消息处理过程
public static void RemoveHook(IntPtr handle, HookProc hook)
{
if (NativeWindow.FromHandle(handle) is HookWindow window)
{
window.RemoveHookProc(hook);
}
}
}
} “`
相关文章
-
Browser Use: AI浏览器自动化实战
Browser Use: AI浏览器自动化实战
- 互联网
- 2026年04月20日
-
BotSharp 5.0 MCP:迈向更开放的AI Agent框架
BotSharp 5.0 MCP:迈向更开放的AI Agent框架
- 互联网
- 2026年04月20日
-
Avalonia跨平台实战,Avalonia相比WPF的便利合集
Avalonia跨平台实战,Avalonia相比WPF的便利合集
- 互联网
- 2026年04月20日
-
C# LINQ 快速入门实战指南,建议收藏学习!
C# LINQ 快速入门实战指南,建议收藏学习!
- 互联网
- 2026年04月20日
-
C# Office COM 加载项
C# Office COM 加载项
- 互联网
- 2026年04月20日
-
C# Socket编程模型
C# Socket编程模型
- 互联网
- 2026年04月20日





