• 締切済み

DOS窓を閉じる×ボタンを押された際のハンドリング

DOS窓を閉じる右上の×ボタンを押された際のハンドリングを知りたいです。この×ボタンを押すとatexitで登録した関数やC++のデストラクタが呼ばれないのです。 どのように調べても情報が出てきません。 これはどのようにすれば良いか関数やキーワードだけでも良いので情報お願い致します。

みんなの回答

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

おかしいな。VC++2008で、finish関数にブレークポイントを張って、 デバッガから起動して、DOS窓を×で閉じると、ちゃんとブレークするよ。 もしかして、プログラムが応答していません、の状況になって、 強制終了させたときの話をしてる? そのときは、おそらく強制的にプロセスを終了させるだろうから、 呼ばれないかもしれないけど。

caps2
質問者

補足

>強制終了させたときの話をしてる? 状況からして考えてみますと仰せのとおり強制終了だと思います。気づきませんでした。 状態はscanf待ちの時に×を押していました。帰宅後検証してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

>この×ボタンを押すとatexitで登録した関数やC++のデストラクタが呼ばれないのです。 どうやって確認したんですか? DOSを起動してプログラムを実行したんですよね。 以下のプログラムをコマンドプロンプトから実行して、 getc(stdin)で待ち状態にし、DOSプロンプトを×で閉じたら、 ファイルにfinishedと書き込まれましたよ。 #include <stdio.h> #include <stdlib.h> FILE* fp; void finish() {   fprintf(fp, "finished\n");   fclose(fp); } int main(void) {   fp = fopen("D:\\test.txt", "wt");   if( fp == NULL ) {     printf("ファイルオープン失敗\r\n");     exit(-1);   }   atexit(finish);   if( getc(stdin) == 'q' ){     printf("Exit\n");     exit(-1);   }   return 0; }

caps2
質問者

お礼

検証に感謝いたします。 Visual Studioのデバッガで調べていました。 確かに上記のプログラムで希望通りの動作を確認いたしました。 まだ確信は持てませんが、どうやらデバッガの特性で×ボタンを押された際すぐにプロセスを解体させてデストラクタやatexitの所まで行かずに終了してしまうようです。 これが本当でしたらお騒がせしまして申し訳ございません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • DOS窓の非表示

    環境:Windows2000,BorlandC++Builder6 system()関数によりDOS上で動く実行ファイルの呼び出し をしています。その際,DOS窓が一瞬出ます。 どうにかDOS窓が出ないようにしたいのですが, 何か方法はないでしょうか? どなたか分かりましたら教えて下さいm(__)m

  • DOS窓の非表示について

    常駐で動くC++のプログラムがいくつかあり、 それらの初回起動はBATファイルで『start aaaa.exe』のように 起動をかけています。 C++のプログラムはDOS窓が表示されるようになっていて プログラムが動くたびにパソコンの画面上で複数のDOS窓が チカチカッとなってしまい、とてもわずらわしく、 出来ればDOS窓を非表示にしたいのですが、何か方法はありませんでしょうか?

  • DOS窓が閉じてしまう。

    こんばんは。Cpad for Borland C++Compilerを使っています。 入力後コンパイルされ(正常に) そしてDOS窓が開きますがそのまま 一瞬表示され(簡単な文字列を表示させるプログラムです)そしてそのまま窓が閉じてしまいます。 これを一時停止させて表示させる手法は何かないのでしょうか? OSはWINDOWSXPSP2 です。

  • dos窓を閉じなくするにはどうしたらいいでしょうか?

    VC++6.0でコンソールアプリを作成し、実行するとDOS窓が直ぐに閉じてしまい結果を見る事が出来ません。LSI-C86で作成すると問題ないのですが、C&VC++を勉強し始めたばかりで、Windowbaseはまだまだ荷が重くコンソールbaseからと思ってやってみたらこの有様です。どなたかこの件について詳しい方が居られましたら是非教えて下さい。よろしくお願いします。

  • system関数を使用時にDos窓を最小化したい

    VC5.0でsystem関数を使用して処理を実行しています。 system関数を使用するとDos窓が表示されますが、 そのDos窓を最小化するにはどうしたら良いですか?

  • Win98DOS窓でのファイルネームについて

    Windows98のDOS窓を使用する際での疑問なんですが、 ファイルネームは (1)Windowsの長い形式 (2)DOS用の短い形式 があると思いますが、DOS窓において(1)から(2)を知るには どういった方法があるのでしょうか?

  • Windows, DOS窓、管理者権限で開くには?

    古いOSのWindowsでは、DOS窓を開いただけで管理者権限が有りましたが、 新しいOSのWindowsでは、DOS窓を開いただけでは、管理者権限が無いようです。 WindowsのDOS窓を、「管理者権限」で開く方法を教えてください。 よろしくお願い申し上げます。

  • DOS窓のサイズを小さくする方法

    DOS窓のサイズを小さくする方法 アクセサリの中にあるdos窓をどうゆうわけか、最大化してしまいました。 もとのサイズに戻すにはどうすればよろしいのでしょうか。    画面いっぱいに大きくなるので、使いづらいのです。初期状態のサイズに戻したいです。    ご指導御願い致します。 

  • DOS窓を閉じるとアクセスできない

    ご存知の方、ご教授お願い致します。 PHPプログラミング初心者入門講座 http://php5.seesaa.net/category/1632821-1.html を参考に、インストール&設定をしました。 Apacheを起動させ、 「Apache/1.3.27 (Win32) PHP/4.2.3 running...」 と記述されている黒い画面(以下、DOS窓)が開いている状態だと、 なんの問題もなくアクセスできるのですが、 DOS窓を閉じると、タスクトレイにApacheのアイコンがあるにも拘らず、 「サーバーに接続できません」と表示され、アクセスできなくなります。 仕方なく「2K-NT-XP-phpdev_start.bat」から起動しなおすと、 「Apache monitor is already started」の警告が出ますので、Apache自体は終了していないと思うのですが…? こちら↓に http://whzat.dyns.net/textbook/apache/ 「Windows98/ME の場合はDOS窓を閉じるとApacheは終了する」と記述がありますが、使用しているPCのOSはWinXP(sp3)です…。 1.WinXPでもDOS窓を閉じるとアクセスできなくなるのでしょうか? 2.何かを設定すれば、DOS窓を閉じてもアクセスできるようになるのでしょうか? 1.2.どちらか片方でも構いません。 ご存知の方、どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • 管理者権限でDOS窓を使うには?

    管理者権限でDOS窓を使うには、どのようにすればいいですか? 現在、3つのハードディスクに別々にOSをインストールしています。 別OSを起動するとVistaの時計が狂ってしまいます。 そこで、これを実行したいのですが  http://blog.so-net.ne.jp/sothis/2006-05-08-1 DOS窓を起動すると「 C:\Users\k> 」( k は私 )と表示されます。 この状態でDOS窓にコマンドを記入して実行するとエラーになります。 実行したいコマンドはこれ net time /setsntp:time.windows.com Vista起動時に自動的に時刻合わせをするコマンドです。 やはり管理者権限でないとダメなようですが、 どのようにすれば管理者権限で実行できるのでしょうか? つまり「 C:\Users\k> 」ではなく、「 C:\> 」で使いたいのです。 管理者権限でログインしなければならないのでしょうか? その場合、どうすれば管理者権限でログインできますか? ちなみにVistaをインストールしたのは私です。 「 k 」 ( 私 )以外のユーザー設定はしていません。 「 k 」以外でログインしたこともありません。

このQ&Aのポイント
  • 子機を増設しましたが、トーン音が鳴らない問題について相談です。
  • 購入した子機を増設したが、電話のコール音や受話器の音がならないトラブルに遭遇しました。
  • ブラザー製の子機を増設したが、トーン音が聞こえず問題が発生しています。
回答を見る