2011-08-17 182 views
5

我有一個用Delphi XE編寫的程序,它使用TMediaPlayer播放WAV文件。該程序在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所示,使用PlaySound()而不是TMediaPlayer。當機器「鎖定」時它工作正常。不知道它通過遠程桌面連接工作。

爲了證實這一點,我創建了一個新的應用程序,把TTimer的形式,在Interval屬性設置爲20000,並把這個代碼在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::-)是的,這是... –