Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在c#中捕获windows通知事件?_C#_Windows_Notifications - Fatal编程技术网

有没有办法在c#中捕获windows通知事件?

有没有办法在c#中捕获windows通知事件?,c#,windows,notifications,C#,Windows,Notifications,您好,我正在尝试用c语言构建一个程序,该程序在后台运行,当您收到windows中的通知(如邮件或电报消息)时激活,有没有办法捕获该事件?windows服务只不过是由服务控制管理器(SCM)启动的windows程序。用户登录后,可以手动启动或安排SCM立即启动服务。如果您不熟悉它们,您可以获得有关MSDN的更多信息 我已经在VisualStudio2008ProfessionalSP1、.NET3.5SP1、WindowsXPSP3中测试了代码。它应该适用于2.0以上的任何框架,也可能适用于1.1

您好,我正在尝试用c语言构建一个程序,该程序在后台运行,当您收到windows中的通知(如邮件或电报消息)时激活,有没有办法捕获该事件?

windows服务只不过是由服务控制管理器(SCM)启动的windows程序。用户登录后,可以手动启动或安排SCM立即启动服务。如果您不熟悉它们,您可以获得有关MSDN的更多信息

我已经在VisualStudio2008ProfessionalSP1、.NET3.5SP1、WindowsXPSP3中测试了代码。它应该适用于2.0以上的任何框架,也可能适用于1.1。我建议您在阅读文本时仔细阅读代码,因为它会让您更加清楚

服务有一个从Windows接收所有消息的控制处理程序。这些可能包括停止或暂停服务的代码,或者在我们的例子中,设备事件。托管服务将抽象此控制处理程序,并仅为您提供
OnStart、OnStop
等方法,您可以实现这些方法以实现所需的功能。然而,我们需要注册我们自己的服务处理程序,以便能够捕获设备事件。请注意,这将禁用所有回调,如
OnStop
,除了
OnStart
,它是在我们告诉Windows使用我们的处理程序之前调用的

用于此操作的Windows API函数是RegisterServiceCtrlHandlerEx,它接受服务名称和在收到消息时调用的回调函数。我们将在服务中的
OnStart
函数中调用它。托管版本返回一个
IntPtr
,它是一个
服务句柄
,但是我们的类已经有一个名为servicehold的属性,所以我们不需要保存它

服务控制处理程序的签名如下所示:

隐藏复制代码

public delegate int ServiceControlHandlerEx(int control, 
                int eventType, IntPtr eventData, IntPtr context);
现在,我们可以通过捕获
SERVICE\u CONTROL\u STOP
事件来实现我们的“
OnStop
”回调,该事件在处理程序的“
CONTROL
”参数中接收。但是,为了处理
服务\u控制\u设备事件
,我们需要做一些其他的事情


Windows服务只不过是由服务控制管理器(SCM)启动的Windows程序。用户登录后,可以手动启动或安排SCM立即启动服务。如果您不熟悉它们,您可以获得有关MSDN的更多信息

我已经在VisualStudio2008ProfessionalSP1、.NET3.5SP1、WindowsXPSP3中测试了代码。它应该适用于2.0以上的任何框架,也可能适用于1.1。我建议您在阅读文本时仔细阅读代码,因为它会让您更加清楚

服务有一个从Windows接收所有消息的控制处理程序。这些可能包括停止或暂停服务的代码,或者在我们的例子中,设备事件。托管服务将抽象此控制处理程序,并仅为您提供
OnStart、OnStop
等方法,您可以实现这些方法以实现所需的功能。然而,我们需要注册我们自己的服务处理程序,以便能够捕获设备事件。请注意,这将禁用所有回调,如
OnStop
,除了
OnStart
,它是在我们告诉Windows使用我们的处理程序之前调用的

用于此操作的Windows API函数是RegisterServiceCtrlHandlerEx,它接受服务名称和在收到消息时调用的回调函数。我们将在服务中的
OnStart
函数中调用它。托管版本返回一个
IntPtr
,它是一个
服务句柄
,但是我们的类已经有一个名为servicehold的属性,所以我们不需要保存它

服务控制处理程序的签名如下所示:

隐藏复制代码

public delegate int ServiceControlHandlerEx(int control, 
                int eventType, IntPtr eventData, IntPtr context);
现在,我们可以通过捕获
SERVICE\u CONTROL\u STOP
事件来实现我们的“
OnStop
”回调,该事件在处理程序的“
CONTROL
”参数中接收。但是,为了处理
服务\u控制\u设备事件
,我们需要做一些其他的事情