2011-12-22 42 views
4

Window CE 6.0で実行中のWin32 C++コンソールアプリケーションに、連続して実行される多数のスレッドが含まれています。場合によっては、アプリケーションを停止する必要があり、私はそれを制御された方法で行うことを望みます。これを行う1つの方法は、単にコンソールウィンドウを監視することであり、コンソールウィンドウを閉じるとプロセスが停止します。残念ながら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

これは最も重要ではない* .NETではありません。これは純粋な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()が失敗することに注意してください。

関連する問題