dポイントプレゼントキャンペーン実施中!

VC++でWin32コンソールアプリケーションを作成しています。

プログラムフォアグラウンドで実行中にCtrl+Cのショートカットを無効にするにはどうしたら良いのでしょうか。

質問者からの補足コメント

  • BOOL WINAPI HandlerRoutine(DWORD dwCtrlType) {
    switch (dwCtrlType) {
    case CTRL_C_EVENT:
    NULL;
    case CTRL_BREAK_EVENT:
    NULL;
    case CTRL_CLOSE_EVENT:
    NULL;
    case CTRL_LOGOFF_EVENT:
    NULL;
    case CTRL_SHUTDOWN_EVENT:
    NULL;
    }
    return TRUE;
    }

    とすることでCtrl+Cなどを無効化できました。
    ですが、int main()などの処理に移ると無効化が解除されてしまいます。
    無効化の範囲をプログラム開始から終了までに伸ばすにはどうすればいいのでしょうか。

      補足日時:2018/09/03 14:19
  • そうです。
    main関数内でSetConsoleCtrlHandler(HandlerRoutine, TRUE);としています。

    http://d.hatena.ne.jp/s-kita/20100928/1285689769こちらのサイトを参考にしています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/09/03 14:51
  • caseでbreakとなって終了となってしまう?ので外しています

    BOOL WINAPI HandlerRoutine(DWORD dwCtrlType) {
    return FALSE;
    }

    int main(void)
    {
    SetConsoleCtrlHandler(HandlerRoutine, FALSE);
    ....
    }

    戻り値をFALSEにしてみてもできません。
    学習不足ですみません

      補足日時:2018/09/03 15:17

A 回答 (4件)

SetConsoleCtrlHandlerはmainで呼んでいるのですか?

この回答への補足あり
    • good
    • 0

>こちらのサイトを参考にしています。


そのサイトのソースをそのまま使っているなら
ctrl+cを押したらそのままアプリは終了してしまうような気がしますが
そのあたりはどうなっていますか?
    • good
    • 0

簡単です。


「無効にする」のではなく、そのシグナルを受け取って何もせずに抜ければよいだけです。
以下参考に。

https://codezine.jp/article/detail/4700
    • good
    • 0

http://www.argv.org/~chome/ctrl-c.html
ここが参考になるかもしれません
    • good
    • 0
この回答へのお礼

すみません
実行できませんでした...
Windows10でVisualStideio2017を使用していますが今はできないのでしょうか?

お礼日時:2018/09/03 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!