Как я могу справиться с закрытием консоли в Windows CE? - PullRequest
4 голосов
/ 22 декабря 2011

У меня есть консольное приложение Win32 C ++, работающее в Window CE 6.0, которое содержит несколько постоянно работающих потоков.Иногда возникает необходимость остановить приложение, и я бы хотел, чтобы это происходило контролируемым образом.Один из способов сделать это - просто следить за окном консоли и, если оно закрывается, остановить процесс.К сожалению, SetConsoleCtrlHandler не является частью API Win32 для Windows CE 6.0.Кто-нибудь знает, как я могу определить, что консоль закрывается в программе Win32 C ++, работающей в CE?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 08 декабря 2014

Я получил эту работу на Windows Embedded Compact 7. Оба события Ctrl + C и "закрытое окно" перехвачены.

  1. Создайте событие Win32.
  2. Передайте этособытие для DeviceIoControl () с использованием IOCTL_CONSOLE_SETCONTROLCEVENT и с учетом дескриптора консоли (например, _fileno (stdout)).Это событие будет сигнализироваться при наборе Ctrl + C или закрытии окна консоли.
  3. Создайте поток, который ожидает, когда событие Win32 станет сигнализированным, и когда это произойдет, вызывает ваш обработчик Ctrl + C иливыполняет очистку и, возможно, выходит из программы.

Обратите внимание, что IOCTL_CONSOLE_SETCONTROLCHANDLER устарел, и DeviceIoControl () завершается ошибкой, когда ему присваивается код IOCTL.

0 голосов
/ 22 декабря 2011

Вы можете наблюдать за Ctrl-C, вызывая DeviceIoControl с IOCTL_CONSOLE_SETCONTROLCHANDLER.Используйте _fileno(stdout) для параметра hDevice.

Я не думаю, что есть какой-либо способ получить уведомление для любого другого механизма "закрытия".

...