1

我已经四处寻找了很长一段时间,似乎无法找到一个好的方法来做到这一点。

基本上我有一个使用 WPF(没有可见窗口)的 C# 进程,我需要在其中处理 WM_ 事件(例如;这样当用户选择注销或重新启动他们的机器时,我可以优雅地关闭)WM_CLOSEWM_DESTROY

我在那里看到了许多解决方案,建议使用System.Windows.InteropServicesto callAddHook并为其提供一个指向函数的指针,该函数随后变为WndProc. 问题在于,据我所知,它取决于实际可见的窗口(在这种情况下没有窗口)。

建议但不起作用的另一种方法是覆盖WndProcWinForm 的方法,但此过程没有可见的窗体或窗口。

我还发现了有关仅消息窗口的内容。某种仍然接收 WM_ 事件的不可见窗口。据我所知,这仅在Microsoft.WindowsCE.Forms程序集中可用。我在我的项目中添加了对该程序集的引用并将 MessageWindow 子类化,如下所示:http: //msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow.aspx但它似乎仍然不起作用。WndProc 内的断点没有被命中。

有什么线索吗?

4

1 回答 1

1

想想你在问什么——如果你没有窗口,你的应用程序如何接收窗口消息(考虑到消息被发送到窗口的句柄)。

这就像说“我如何在没有电子邮件地址的情况下接收电子邮件?”

Michael Entin 在此处介绍了关闭期间 Windows 的行为。

我有 99% 的把握,当用户注销时,在用户会话中运行的所有进程都会自动关闭,所以这应该不是问题。如果您确实必须处理此窗口消息,您可以按照Any way to create a hidden main window in C# 创建一个隐藏窗口?

于 2012-03-06T00:23:59.703 回答