Delphi 未登录时通过扬声器输出声音

Delphi 未登录时通过扬声器输出声音,delphi,windows-7,Delphi,Windows 7,我有一个用delphixe编写的程序,它使用TMediaPlayer播放WAV文件。该程序在Windows 7计算机的系统托盘中运行。程序等待事件触发播放wav文件。如果我登录到计算机本身,wav可以正常播放。但如果我锁定计算机终端(或通过远程桌面登录),wav文件不会通过计算机扬声器播放。我知道事件正在被触发,因为事件处理程序中的所有其他代码都工作正常;只是你听不到wav文件。我已将音量硬编码到最大级别,因此我知道这不是音量问题。如果当前没有人登录到计算机,Windows 7是否有防止扬声器发

我有一个用delphixe编写的程序,它使用TMediaPlayer播放WAV文件。该程序在Windows 7计算机的系统托盘中运行。程序等待事件触发播放wav文件。如果我登录到计算机本身,wav可以正常播放。但如果我锁定计算机终端(或通过远程桌面登录),wav文件不会通过计算机扬声器播放。我知道事件正在被触发,因为事件处理程序中的所有其他代码都工作正常;只是你听不到wav文件。我已将音量硬编码到最大级别,因此我知道这不是音量问题。如果当前没有人登录到计算机,Windows 7是否有防止扬声器发出声音的功能?如果存在这种限制,有办法解决吗?

正如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;

然后我运行它,锁定控制台(使用Windows L),然后等待20秒。声音播放成功。

如果仅使用标准的PlaySound Windows API,是否会出现相同的问题?是的,使用PlaySound时也会出现相同的问题。我也尝试过使用语音API,但也有同样的问题。这就好像除非您直接登录到计算机,否则声卡不会输出任何内容。我确信,即使在控制台被锁定的情况下,运行的程序也可以使用PlaySound API函数播放声音。我不熟悉Delphi,但是您确定您已经直接调用了Win32 API吗?如果有帮助的话,当您锁定计算机时,屏幕上显示的实际上是一个不同的会话。与远程桌面相同。。。这是一个不同的会话。在我的测试中,
PlaySound
有效…在网络搜索中,当电脑被锁定时,声音应该有效。。。事实上,甚至有应用程序可以在电脑锁定时静音。。。在其他PC上是否也会发生同样的行为?在远程桌面连接上工作时,您需要将连接设置为在本地播放声音,而不是在远程计算机上播放。我知道这一点,因为我不得不提醒同事们在家工作的时候要改变他们的声音路线…@Marjan,+1评论,以及不要使用钢丝切割机。我相信这很诱人。@Marjan:这就是问题所在。我通过远程桌面进行安装和程序启动。一旦我在RD中切换设置以保持计算机上的声音运行该程序,它就工作得很好。