[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/03/06(Mon) 15:06
投稿者名:yuta
Eメール:
URL :
タイトル:
Windows API のBeep関数について
いつもお世話になっております。
VB6.0(SP5)
Windows XP Pro(SP2)で開発を行なっています。

現在、Windows APIのBeep関数を使用して、非同期動作でPCのビープ音を鳴らす
プログラムを作成しています。

参考にしたWin32APIのヘルプでは、第2引数の[dwDuration]に-1を設定することで、
例外的に非同期動作を行なうと記述があり、早速試してみたのですが、
ビープ音が鳴動しませんでした。

なお、戻り値を参照してみたところ、正常終了となっており、拡張エラーも取得しましたが、
特に問題はありませんでした。

また、検索エンジンで[Beep関数]や[Beep API]などで検索をしてみましたが、
参考になるサイトが見つかりませんでした。(MSDNも参考にしましたがわかりませんでした。)

そこで、Beep関数の非同期動作が出来るかどうかをご教授いただきたく思います。

長文失礼しました。 m(_ _)m

投稿時間:2006/03/06(Mon) 18:07
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Windows API のBeep関数について
参考にしたWin32APIのヘルプでは、第2引数の[dwDuration]に-1を設定することで、
> 例外的に非同期動作を行なうと記述があり、早速試してみたのですが、
MessageBeep関数 ではないでしょうか?

Beep関数は、MSDN では、この関数は同期で実行されます と書いていますが。

投稿時間:2006/03/06(Mon) 18:48
投稿者名:yuta
Eメール:
URL :
タイトル:
Re^2: Windows API のBeep関数について
花ちゃんさん
早速の返信ありがとうございます。

>  参考にしたWin32APIのヘルプでは、第2引数の[dwDuration]に-1を設定することで、
> > 例外的に非同期動作を行なうと記述があり、早速試してみたのですが、
> MessageBeep関数 ではないでしょうか?
> Beep関数は、MSDN では、この関数は同期で実行されます と書いていますが。

確かに、MessageBeep関数は、非同期動作を行なうと書かれていますが、
下記のサイトには、上記に挙げた値を代入することでBeep関数をもう一度呼び出すまで
再生すると書かれていました。

hhttp://home3.highway.ne.jp/hwa08546/html/program/api/api_index.html

また、MSのWin32API プログラマーズ リファレンスには、-1を指定すると、
例外として非同期的に動作を行ない、音を再生したまますぐ制御を戻すという記述がありました。
(ただ、1994年時点のリファレンスになっています。)

もしかしたら以前は使用できたが、現在は使用できないという可能性も合ったりしますでしょうか?

私のほうも、出来る限り調査したいと思います。

投稿時間:2006/03/06(Mon) 19:30
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: Windows API のBeep関数について
> (ただ、1994年時点のリファレンスになっています。)
その頃のリファレンスには、確かに、-1 という値と非同期動作に関する記述がありますね。


> もしかしたら以前は使用できたが、現在は使用できないという可能性も合ったりしますでしょうか?
fj の下記スレッドを見ると、NT4 でも駄目だったという報告が見えますので、
NT 3.51 以降では使えない機能……という事では無いでしょうか。NT 3.5 / 3.1 だとどうだろう?
hhttp://groups.google.co.jp/group/fj.os.ms-windows.programming/browse_frm/thread/29fee947c2b31435/2a3bdf8bf592ffa5

# 試してみたいけど、NT 3.1 マシンは手元に無いしなぁ……。(Win 3.1 マシンならあるけど)

投稿時間:2006/03/07(Tue) 13:16
投稿者名:yuta
Eメール:
URL :
タイトル:
Re^4: 解決ではありませんが・・・
返信が遅れてしまって申し訳ありません。

> > もしかしたら以前は使用できたが、現在は使用できないという可能性も合ったりしますでしょう
か?
> fj の下記スレッドを見ると、NT4 でも駄目だったという報告が見えますので、
> NT 3.51 以降では使えない機能……という事では無いでしょうか。NT 3.5 / 3.1 だとどうだろう?

なるほど、だからMSDNなどには非同期的動作の記述等が無かったのですね。

結果としては現在の環境(WinXP)では、実現不可能ということなので、
現状で非同期動作可能なAPI関数(MessageBeep、sndPlaySound等)を使用して実現しようと思います。

花ちゃんさん、魔界の仮面弁士さん
ありがとうございました。m(_ _)m