我有一個在Windows CE 6.0中運行的Win32 C++控制檯應用程序,它包含許多連續運行的線程。偶爾需要停止應用程序,我希望以受控方式進行。這樣做的一種方法是簡單地監視控制檯窗口,如果它關閉,則停止該過程。不幸的是,SetConsoleCtrlHandler似乎不是Windows CE 6.0的Win32 API的一部分。有誰知道我可以檢測到控制檯在運行在CE中的Win32 C++程序中關閉了嗎?如何在Windows CE中處理控制檯關閉?
感謝,
我有一個在Windows CE 6.0中運行的Win32 C++控制檯應用程序,它包含許多連續運行的線程。偶爾需要停止應用程序,我希望以受控方式進行。這樣做的一種方法是簡單地監視控制檯窗口,如果它關閉,則停止該過程。不幸的是,SetConsoleCtrlHandler似乎不是Windows CE 6.0的Win32 API的一部分。有誰知道我可以檢測到控制檯在運行在CE中的Win32 C++程序中關閉了嗎?如何在Windows CE中處理控制檯關閉?
感謝,
你可以通過調用DeviceIoControl與IOCTL_CONSOLE_SETCONTROLCHANDLER
監視按Ctrl-C。 hDevice參數使用_fileno
(stdout)
。
我不認爲有任何方法可以通知任何其他「關閉」機制。
我在Windows Embedded Compact 7上使用了這個工具。Ctrl + C和「窗口關閉」事件都被捕獲。
請注意,IOCTL_CONSOLE_SETCONTROLCHANDLER已被棄用,並且在給定該IOCTL代碼時DeviceIoControl()失敗。
我認爲IOCTL_CONSOLE_SETCONTROLCHANDLER是一個.Net調用。這是從Win32應用程序提供的嗎? – 2011-12-22 20:31:13
應該工作,看看這裏:http://stackoverflow.com/questions/1366879/how-can-i-handle-ctrlc-in-a-windows-ce-console-application – marcinj 2011-12-28 16:29:18
這是最defintely *不*一個.NET調用 - 這是您發送給DeviceIoControl的IOCTL值,它是一個純Win32 API調用。 – ctacke 2011-12-28 18:31:40