有没有办法在 C# 中捕获 windows 通知事件?
Is there a way to catch a windows notification event in c#?
你好,我正在尝试用 c# 构建一个程序,该程序在后台运行并在你收到 windows 中的通知(如邮件或电报消息)时激活,有没有办法捕获该事件?
Windows 服务只不过是一个由服务控制管理器 (SCM) 启动的 Windows 程序。可以手动启动服务或安排 SCM 在用户登录后立即启动服务。如果您不熟悉它们,可以在 MSDN 上获得更多信息。
我已经在 Visual Studio 2008 Professional SP1、.NET 3.5 SP1、Windows XP SP3 中测试了代码。它应该适用于 2.0 以上的任何框架,并且它可能适用于 1.1。我建议您在阅读文本时仔细阅读代码,因为它对您来说会变得更加清晰。
服务有一个控制处理程序,它接收来自 Windows 的所有消息。这些可能包括停止或暂停服务的代码,或者在我们的例子中,包括设备事件。托管服务将抽象此控制处理程序并只为您提供 OnStart, OnStop
等方法,您可以实施这些方法以实现所需的功能。然而,我们需要注册我们自己的服务处理程序,这样我们才能捕获设备事件。请注意,这将禁用所有回调,如 OnStop
除了 OnStart
,它在我们告诉 Windows 使用我们的处理程序之前被调用。
Windows API 函数是 RegisterServiceCtrlHandlerEx
,它接受一个服务名称和一个回调函数,以便在收到消息时调用。我们将在我们服务的 OnStart
函数中调用它。托管版本 returns 一个 IntPtr
是一个 service handle
,但我们已经有一个 class 的 属性 称为 ServiceHandle,因此我们不需要保存它。
服务控制处理程序的签名是这样的:
隐藏复制代码
public delegate int ServiceControlHandlerEx(int control,
int eventType, IntPtr eventData, IntPtr context);
现在,我们可以通过捕获 SERVICE_CONTROL_STOP
事件来实现我们的“OnStop
”回调,该事件在处理程序的“control
”参数中接收。但是,为了处理 SERVICE_CONTROL_DEVICEEVENT
,我们需要做一些其他事情。
你好,我正在尝试用 c# 构建一个程序,该程序在后台运行并在你收到 windows 中的通知(如邮件或电报消息)时激活,有没有办法捕获该事件?
Windows 服务只不过是一个由服务控制管理器 (SCM) 启动的 Windows 程序。可以手动启动服务或安排 SCM 在用户登录后立即启动服务。如果您不熟悉它们,可以在 MSDN 上获得更多信息。
我已经在 Visual Studio 2008 Professional SP1、.NET 3.5 SP1、Windows XP SP3 中测试了代码。它应该适用于 2.0 以上的任何框架,并且它可能适用于 1.1。我建议您在阅读文本时仔细阅读代码,因为它对您来说会变得更加清晰。
服务有一个控制处理程序,它接收来自 Windows 的所有消息。这些可能包括停止或暂停服务的代码,或者在我们的例子中,包括设备事件。托管服务将抽象此控制处理程序并只为您提供 OnStart, OnStop
等方法,您可以实施这些方法以实现所需的功能。然而,我们需要注册我们自己的服务处理程序,这样我们才能捕获设备事件。请注意,这将禁用所有回调,如 OnStop
除了 OnStart
,它在我们告诉 Windows 使用我们的处理程序之前被调用。
Windows API 函数是 RegisterServiceCtrlHandlerEx
,它接受一个服务名称和一个回调函数,以便在收到消息时调用。我们将在我们服务的 OnStart
函数中调用它。托管版本 returns 一个 IntPtr
是一个 service handle
,但我们已经有一个 class 的 属性 称为 ServiceHandle,因此我们不需要保存它。
服务控制处理程序的签名是这样的:
隐藏复制代码
public delegate int ServiceControlHandlerEx(int control,
int eventType, IntPtr eventData, IntPtr context);
现在,我们可以通过捕获 SERVICE_CONTROL_STOP
事件来实现我们的“OnStop
”回调,该事件在处理程序的“control
”参数中接收。但是,为了处理 SERVICE_CONTROL_DEVICEEVENT
,我们需要做一些其他事情。