2009-09-02 46 views
3

在關閉我的應用程序之前,我需要做一些清理,但SetConsoleCtrlHandler似乎無法用於Windows CE控制檯應用程序。如何在Windows CE控制檯應用程序中處理Ctrl + C?

是否有任何替代方法在Windows CE 6中處理Ctrl+C

+0

任何機會,你可以改爲使用「禁用」Control + C來殺死你的應用程序?這個I/O控制可能會做到這一點:http://msdn.microsoft.com/en-us/library/aa931517.aspx。 – reuben 2009-09-03 07:12:08

+0

謝謝,但我需要的是在關閉應用程序之前做一些清理工作,而不是阻止應用程序被殺害。 – 2009-09-03 09:37:51

回答

5

根據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)。
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()失敗。

相關問題