处理发送到 C# 托盘应用的消息WM_CLOSE
本文关键字:消息 WM CLOSE 应用 处理 | 更新日期: 2023-09-27 18:28:36
我找到了几篇文章告诉我如何使用WM_CLOSE消息,但我的应用程序是必须处理WM_CLOSE消息的人。
有没有办法连接WM_CLOSE并处理它?因为WM_CLOSE只关闭托盘图标,但不会终止进程本身......
问候
为此,
您需要覆盖Form
上的WndProc
方法,该方法是主托盘图标和句柄WM_CLOSE
private const int WM_CLOSE = 0x0010;
protected override void WndProc(ref Message m) {
if (m.Msg == WM_CLOSE) {
// Close everything
}
base.WndProc(ref m);
}
我们可以通过向Application
添加MessageFilter
来处理WM_CLOSE
消息:
private class CloseMessageFilter : IMessageFilter
{
const int WM_CLOSE = 0x0010;
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_CLOSE)
Application.Exit();
return false;
}
}
static void Main()
{
// ...
Application.AddMessageFilter(new CloseMessageFilter());
Application.Run();
}
仅在 .NET 6 下测试。