2011-12-22 1 views
4

연속적으로 실행되는 여러 스레드가 포함 된 Window CE 6.0에서 실행되는 Win32 C++ 콘솔 응용 프로그램이 있습니다. 때로는 응용 프로그램을 중지 할 필요가 있으며, 나는 그것을 제어 된 방식으로 발생시키고 싶습니다. 이 작업을 수행하는 한 가지 방법은 콘솔 창을 모니터링하는 것입니다. 콘솔 창이 닫히면 프로세스를 중지합니다. 불행하게도 SetConsoleCtrlHandler은 Windows CE 6.0 용 Win32 API의 일부로 보이지 않습니다. 누구나 CE에서 실행중인 Win32 C++ 프로그램에서 콘솔이 닫히는 것을 어떻게 감지 할 수 있는지 알고 있습니까?Windows CE에서 콘솔 닫기를 처리하려면 어떻게해야합니까?

감사합니다,

답변

0

당신은 IOCTL_CONSOLE_SETCONTROLCHANDLERDeviceIoControl를 호출하여 Ctrl-C를위한 볼 수 있습니다. hDevice 매개 변수로 _fileno(stdout)을 사용하십시오.

다른 "닫기"메커니즘에 대한 알림을받을 방법이 없다고 생각합니다.

+0

IOCTL_CONSOLE_SETCONTROLCHANDLER가 .Net 호출이라고 생각했습니다. Win32 응용 프로그램에서 사용할 수 있습니까? –

+0

가 작동해야합니다. http://stackoverflow.com/questions/1366879/how-can-i-handle-ctrlc-in-a-windows-ce-console-application – marcinj

+0

가장 중요한 것은 * 아닙니다. 호출 - 순수한 Win32 API 호출 인 DeviceIoControl에 보내는 IOCTL 값입니다. – ctacke

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()이 실패합니다.