C# 什么类型的windows应用程序可以接收系统事件?

C# 什么类型的windows应用程序可以接收系统事件?,c#,.net,wpf,windows,C#,.net,Wpf,Windows,什么类型的windows应用程序可以接收系统事件? 我指的是用户关闭的事件。 Windows窗体、WPF应用程序和Windows服务可以做到这一点。但是我不知道还有其他的。基于Windows窗体和WPF的图形应用程序本机侦听一些Windows API事件。命令行和其他类型可以订阅这些事件,但您必须编写这些代码 更新: 下面是一篇关于从托管应用程序接收Win32 API事件的文章: 请注意,您的应用程序必须运行才能接收事件,因此,如果您想从控制台应用程序执行此操作,您的应用程序必须启动并保持运行

什么类型的windows应用程序可以接收系统事件? 我指的是用户关闭的事件。
Windows窗体、WPF应用程序和Windows服务可以做到这一点。但是我不知道还有其他的。基于Windows窗体和WPF的图形应用程序本机侦听一些Windows API事件。命令行和其他类型可以订阅这些事件,但您必须编写这些代码

更新:

下面是一篇关于从托管应用程序接收Win32 API事件的文章:


请注意,您的应用程序必须运行才能接收事件,因此,如果您想从控制台应用程序执行此操作,您的应用程序必须启动并保持运行,直到某些外部信号导致其关闭。

基于Windows窗体和WPF的图形应用程序本机侦听某些Windows API事件。命令行和其他类型可以订阅这些事件,但您必须编写这些代码

更新:

下面是一篇关于从托管应用程序接收Win32 API事件的文章:


请注意,您的应用程序必须运行才能接收事件,因此,如果您想从控制台应用程序执行此操作,您的应用程序必须启动并保持运行,直到某些外部信号导致其关闭。

获取此类事件需要一个窗口和一个消息循环。该窗口由SystemEvents负责,消息循环会自动出现在WPF或winforms应用程序中

如果您在其他类型的应用程序(如服务或控制台模式应用程序)中使用它,那么创建专用线程就足够聪明了。您将在调试器(调试+Windows+线程)中看到名为“.NET SystemEvents”的线程。当您的应用程序在非交互式Windows工作站(如服务)中运行时,或者当您的主方法没有[StatThread]属性(如控制台应用程序)时,就会发生这种情况


您的代码中不需要任何特殊内容来订阅事件。但请注意,您的事件处理程序将在此帮助程序线程上运行,可能需要使用lock关键字进行同步。

获取此类事件需要一个窗口和一个消息循环。该窗口由SystemEvents负责,消息循环会自动出现在WPF或winforms应用程序中

如果您在其他类型的应用程序(如服务或控制台模式应用程序)中使用它,那么创建专用线程就足够聪明了。您将在调试器(调试+Windows+线程)中看到名为“.NET SystemEvents”的线程。当您的应用程序在非交互式Windows工作站(如服务)中运行时,或者当您的主方法没有[StatThread]属性(如控制台应用程序)时,就会发生这种情况


您的代码中不需要任何特殊内容来订阅事件。但请注意,您的事件处理程序将在此帮助程序线程上运行,可能需要使用lock关键字进行同步。

是否有特定类型的windows应用程序是您试图捕获系统事件的原因?我已使用windows窗体应用程序和WPF应用程序完成了此操作。我对Vista上的WPF版本和Win7上的Windows窗体版本有一些问题;但那是另一个故事。我只是想知道C#中的(即)控制台应用程序是否可以实现这一点?感谢您试图捕获系统事件的特定类型的windows应用程序?我已经使用windows窗体应用程序和WPF应用程序完成了此操作。我对Vista上的WPF版本和Win7上的Windows窗体版本有一些问题;但那是另一个故事。我只是想知道C#中的(即)控制台应用程序是否可以实现这一点?谢谢你能给我介绍一下如何使用控制台应用程序的教程吗?多谢各位@神智健全的Wonko_那么我应该问什么样的问题呢?你肯定会像你一样评判别人!你是一个伟大的开发者!祝贺你@Dave_Swersky因为我需要开始和结束活动,所以我找到了另一种方法。对于一开始,我只执行所需的代码,然后执行System.Windows.Forms.Application.ApplicationExit.AddHandler(funse->what_ever_on_end);;Application.Run()成功了!再次感谢!你能给我介绍一下如何使用控制台应用程序的教程吗?多谢各位@神智健全的Wonko_那么我应该问什么样的问题呢?你肯定会像你一样评判别人!你是一个伟大的开发者!祝贺你@Dave_Swersky因为我需要开始和结束活动,所以我找到了另一种方法。对于一开始,我只执行所需的代码,然后执行System.Windows.Forms.Application.ApplicationExit.AddHandler(funse->what_ever_on_end);;Application.Run()成功了!再次感谢!