在關閉我的應用程序之前,我需要做一些清理,但SetConsoleCtrlHandler
似乎無法用於Windows CE控制檯應用程序。如何在Windows CE控制檯應用程序中處理Ctrl + C?
是否有任何替代方法在Windows CE 6中處理Ctrl+C
?
在關閉我的應用程序之前,我需要做一些清理,但SetConsoleCtrlHandler
似乎無法用於Windows CE控制檯應用程序。如何在Windows CE控制檯應用程序中處理Ctrl + C?
是否有任何替代方法在Windows CE 6中處理Ctrl+C
?
根據Microsoft的文檔,在Windows CE 3.0及更高版本中,調用IOCTL_CONSOLE_SETCONTROLCHANDLER
控制代碼的DeviceIoControl
函數將在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
其中consoleHandler
當然是你按Ctrl + C處理程序。
文檔:
接頭需要:
Console.h
winbase.h
(通常是包括噸通過windows.h)。我在Windows Embedded Compact 7上使用了這個工具。Ctrl + C和「窗口關閉」事件都被捕獲。
請注意,IOCTL_CONSOLE_SETCONTROLCHANDLER已被棄用,並且在給定該IOCTL代碼時DeviceIoControl()失敗。
任何機會,你可以改爲使用「禁用」Control + C來殺死你的應用程序?這個I/O控制可能會做到這一點:http://msdn.microsoft.com/en-us/library/aa931517.aspx。 – reuben 2009-09-03 07:12:08
謝謝,但我需要的是在關閉應用程序之前做一些清理工作,而不是阻止應用程序被殺害。 – 2009-09-03 09:37:51