2011-08-17 5 views
5

私はTMediaPlayerを使ってWAVファイルを再生するDelphi XEで書かれたプログラムを持っています。このプログラムは、Windows 7コンピュータのシステムトレイで実行されます。プログラムは、イベントが発生してwavファイルを再生するのを待ちます。私がコンピュータ自体にログインしている場合、wavは正常に動作します。しかし、コンピュータの端末をロックする(またはリモートデスクトップ経由でログインする)と、wavファイルはコンピュータのスピーカーから再生されません。イベントハンドラ内の他のすべてのコードが正常に動作するため、イベントがトリガされていることがわかります。 wavファイルが聞こえないだけです。ボリュームを最大レベルまでハードコードしていますので、ボリュームの問題ではないことが分かりました。誰も現在コンピュータにログインしていない場合、スピーカーからサウンドが聞こえないようにWindows 7には何かがありますか?その制限が存在する場合は、回避策がありますか?ログインしていないときにスピーカーからサウンドを出力する

+1

標準のPlaySound Windows APIを使用するだけで同じ問題がありますか? – Brad

+0

はい、PlaySoundを使用して同じ問題が発生します。私はSpeech APIを使ってみても同じ問題があります。それは、あなたが直接コンピュータにログインしていない限り、サウンドカードが何も出力しないかのようです。 –

+0

コンソールがロックされていても、実行中のプログラムがPlaySound API関数でサウンドを再生できることは確かです。私はDelphiに精通していませんが、あなたはWin32 APIを直接呼び出していると思いますか?それが助けになると、コンピュータをロックすると、画面に表示される内容は実際には別のセッションになります。リモートデスクトップと同じです...別のセッションです。 – Brad

答えて

3

Bradが示唆するように、TMediaPlayerの代わりにPlaySound()を使用してください。マシンがロックされているとうまく動作します。それはリモートデスクトップ接続を介して動作しているかどうかは分かりません。

はこのことを確認するために、私は、新しいアプリを作成したフォームにTTimerを入れて、20000にIntervalプロパティを設定し、OnTimerイベントにこのコードを配置:

私はそれを実行した後
procedure TForm13.Timer1Timer(Sender: TObject); 
begin 
    PlaySound('c:\windows\media\tada.wav', 0, SND_ASYNC or SND_FILENAME); 
end; 

、ロックコンソール(WindowsL)を使用し、20秒間待った。サウンドは正常に再生されました。

+2

リモートデスクトップ接続で作業する場合は、リモートマシンではなくローカルでサウンドを再生するように接続を設定する必要があります。私が知っているのは、同僚が自宅から仕事をしているときに彼らの音を再ルーティングするように思い出させなければならないからです。 –

+2

@Marjan、コメントに+1、ワイヤーカッターに頼らないためです。私はそれが魅力的だったと確信しています。 –

+0

@Chris :-)はいそれは... –

関連する問題