3

我需要在关闭我的应用程序之前进行一些清理,但SetConsoleCtrlHandler似乎不适用于 Windows CE 控制台应用程序。

Ctrl+C在 Windows CE 6 中是否有其他处理方法?

4

2 回答 2

5

根据 Microsoft 的文档,在 Windows CE 3.0 及更高版本上,DeviceIoControl使用控制代码调用的函数IOCTL_CONSOLE_SETCONTROLCHANDLER将在 Windows CE 上安装 Ctrl+C 处理程序。我自己还没有尝试过,但是这样的“应该”工作:

DWORD ignore;
DeviceIoControl(
    _fileno(stdout),                    // handle to the console
    IOCTL_CONSOLE_SETCONTROLCHANDLER,   // Tell Win CE to set the console Ctrl+C handler
    (LPVOID)consoleHandler,             // pointer to the signal handler
    sizeof(consoleHandler),             // size of the pointer
    NULL,                               // output buffer not needed
    0,                                  // zero output buffer size
    &ignore,                            // no data will be put into the output buffer so we don't need its size
    NULL);                              // not an asynchronous operation - don't need to provide async info

你的 Ctrl+C 处理程序当然在哪里consoleHandler

文件:

需要的标头:

  • Console.h
  • winbase.h(通常包含在 windows.h 中)。
于 2011-12-01T20:48:41.663 回答
0

我在 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() 将失败。

于 2014-12-08T14:05:24.907 回答