| ||||||||||||
|
システムの通知を制御 (要KERNEL32.DLL)
| ||||||||||||
重大なシステムエラーが発生した時、エラーダイアログが自動的に表示されるようになっていますが、 時には「プログラム側で処理したいので、表示して欲しくない」という場合もあるでしょう。 コチラにディスクを検知するサンプルを載せていますが、 フロッピーが挿入されてない時にフロッピードライブを検知しようとすると、 「ドライブにディスクがありません。」とディスク挿入を促すメッセージダイアログが表示されてしまいます。 この場合、キャンセルボタンを押してもらうことで問題なく処理終了できるのですが、 利用者がキャンセルを押さないことには先に進まないようになっており、 また、独自に表示させているわけではないので、応用が効きにくいという点があります。 メッセージ表示をどうするかは置いておいて、このダイアログを表示させないようにする方法を紹介します。 システムに処理させる内容を、呼び出し側アプリケーションに委ねるAPI関数SetErrorModeを使うことで、 呼出元プロセスにコードを送る「SEM_FAILCRITICALERRORS(=0x0001)」、 メモリの一般保護違反を起こしても表示させない「SEM_NOGPFAULTERRORBOX(=0x0002)」、 メモリ整列の違反を自動修復し、呼出元にに認識させない「SEM_NOALIGNMENTFAULTEXCEPT(=0x0004)」、 OSがファイルを見つけられなくても表示させない「SEM_NOOPENFILEERRORBOX(=0x8000)」、 以上を組み合わせて使用します。システム既定の処理に戻す際は、0を指定してください。 | ||||||||||||
![]() | ||||||||||||
| ||||||||||||
![]() | ||||||||||||
| ||||||||||||