• ベストアンサー

VCでビープ音を鳴らし続ける

VCでビープ音を鳴らし続けるにはどうしたらよいのでしょうか。 以下のような処理がしたいのです。 (1)プログラムでエラーが発生 (2)エラーを表示するダイアログをビープ音を鳴らしながら表示 (3)OKを押すとビープ音が消える。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

試してないです。 例えばですが エラーが発生したら bContinueBeep = TRUE; として while で beep を鳴らしつづけます。 このままだと、無限ループに入ってしまい、PGは固まってしまうので while文の中で PeekMessage を実行してやれば OK ボタンが押された場合、それを処理することが可能になります。ボタン処理で bContinueBeep = FALSE; みたいな感じにすれば御希望の処理は可能でしょう。 でも「ピー」って鳴らしたいのならダメかも…。 以下のソースだと「ピピピ」とかになるのかな(試してない) ↑それなら、タイマー使ってもいいのかな? while(bContinueBeep) { MessageBeep(0); Sleep(100); while(PeekMessage(msg, NULL, 0, 0, PM_NOREMOVE)) { // メッセージ処理 } } メッセージ処理の部分、手許にドキュメントないので覚えてません。DispatchMessage() ? ちゃうかも…。

youking
質問者

お礼

回答ありがとうございます。 ピーと鳴らしたいのですが、 回答の方法ですとやはりピピピとなっていしまいます。 他の方法があればよろしくお願いします。

その他の回答 (2)

回答No.3

私も、#2 で参考URL に載せた IOSCM.SYS の方でやってみましたけど、私の PC 環境では「ピーーー」でした。参考までに。 それと、#2 で、「 Windows では」と書きましたけど、Win95/98/ME では、そのまま普通に outp を実行しても特権違反の例外は発生しないようですね。( IOSCM.SYS のドキュメントに書いてありました。)

回答No.2

ピーと鳴らすには、直接ポートを操作しないといけないんじゃないでしょうか。 AT互換機なら、 _outp(0x61, 3);  // ON _outp(0x61, 0);  // OFF のような感じなんですが、Windows では、そのままでは実行しようとしても特権違反とかで実行できません。 正攻法で行くならデバイスドライバを作って(要DDK)、ということになると思うのですが、デバイスドライバを作らなくても IO ポートの操作を可能にするツールがあるようです。 http://www.sanritz.co.jp/VesNT/sample/beep1/beep.htm http://www.vector.co.jp/soft/winnt/prog/se309574.html

参考URL:
http://www.vector.co.jp/soft/winnt/prog/se309574.html
youking
質問者

お礼

回答ありがとうございます。 早速試してみたのですが、結局「ピピピピピ」となってしまいました。 また何か分かりましたら報告します。

関連するQ&A