【问题标题】:How can I handle console closing in a Windows CE?如何在 Windows CE 中处理控制台关闭?
【发布时间】:2012-01-26 05:44:56
【问题描述】:

我有一个在 Window CE 6.0 中运行的 Win32 C++ 控制台应用程序,它包含许多连续运行的线程。有时需要停止应用程序,我希望以可控的方式发生这种情况。这样做的一种方法是简单地监视控制台窗口,如果它关闭则停止进程。不幸的是,SetConsoleCtrlHandler 似乎不是 Windows CE 6.0 的 Win32 api 的一部分。有谁知道我如何在 CE 中运行的 Win32 C++ 程序中检测到控制台正在关闭?

谢谢,

【问题讨论】:

    标签: windows winapi visual-c++ windows-ce console-application


    【解决方案1】:

    您可以通过调用DeviceIoControlIOCTL_CONSOLE_SETCONTROLCHANDLER 来监视Ctrl-C。 hDevice 参数使用_fileno(stdout)

    我认为没有任何方法可以获取任何其他“关闭”机制的通知。

    【讨论】:

    • 我认为 IOCTL_CONSOLE_SETCONTROLCHANDLER 是一个 .Net 调用。可以从 Win32 应用程序获得吗?
    • 应该可以,看这里:stackoverflow.com/questions/1366879/…
    • 它绝对不是 .NET 调用 - 它是您发送给 DeviceIoControl 的 IOCTL 值,它是一个纯 Win32 API 调用。
    【解决方案2】:

    我在 Windows Embedded Compact 7 上进行了这项工作。Ctrl+C 和“窗口关闭”事件都被捕获。

    1. 创建一个 Win32 事件。
    2. 使用 IOCTL_CONSOLE_SETCONTROLCEVENT 将该事件传递给 DeviceIoControl(),并提供控制台句柄(例如 _fileno(stdout))。该事件将在按下 Ctrl+C 或关闭控制台窗口时发出信号。
    3. 创建一个等待 Win32 事件发出信号的线程,当它发出信号时,调用您的 Ctrl+C 处理程序或执行您的清理,并可能退出程序。

    请注意,IOCTL_CONSOLE_SETCONTROLCHANDLER 已被弃用,并且当给出 IOCTL 代码时,DeviceIoControl() 会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2015-05-27
      • 2015-11-29
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多