哪种Windows应用程序可以接收系统事件? 我的意思是像用户关闭的事件。 Windows窗体,WPF应用程序和Windows服务都可以做到这一点。但我不知道其他任何人。
答案 0 :(得分:2)
基于Windows窗体和WPF的图形应用程序本机监听某些Windows API事件。命令行和其他类型可以订阅这些事件,但您必须编写该代码。
更新:
以下是有关从托管应用程序接收Win32 API事件的文章:
http://www.codeproject.com/KB/cs/interopevents.aspx
请注意,您的应用程序必须正在运行才能接收事件,因此如果您想从控制台应用程序执行此操作,您的应用必须启动并保持运行,直到某些外部信号导致其关闭。
答案 1 :(得分:1)
获取此类事件需要窗口和消息循环。该窗口由SystemEvents处理,消息循环自动存在于WPF或winforms应用程序中。
如果您在其他类型的应用程序(如服务或控制台模式应用程序)中使用它,则可以创建专用线程。您将在调试器(Debug + Windows + Threads)中看到该线程,其名称为“.NET SystemEvents”。当您的应用程序在非交互式Windows工作站(如服务)中运行或者您的Main方法没有[STAThread]属性(如控制台应用程序)时,就会发生这种情况。
您的代码中没有任何特殊内容可以订阅该事件。但请注意,您的事件处理程序将在此辅助线程上运行,可能需要与 lock 关键字同步。