代码之家  ›  专栏  ›  技术社区  ›  Kaveh Shahbazian

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

  •  0
  • Kaveh Shahbazian  · 技术社区  · 15 年前

    什么类型的Windows应用程序可以接收系统事件? 我指的是用户关闭的事件。 Windows窗体、WPF应用程序和Windows服务可以做到这一点。但我不知道还有其他人。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Dave Swersky    15 年前

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

    更新:

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

    http://www.codeproject.com/KB/cs/interopevents.aspx

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

        2
  •  1
  •   Hans Passant    15 年前

    获取这样的事件需要一个窗口和一个消息循环。窗口由SystemEvents负责,消息循环在WPF或WinForms应用程序中自动存在。

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

    您的代码中不需要任何特殊的东西来订阅事件。但请注意,您的事件处理程序将在此助手线程上运行,并与 可能需要关键字。