这个问题以前也被问过,但没有定论。
我用Delphi写了一个Windows服务,需要在某些条件下发出蜂鸣声。在XP上运行得很好,但在Windows 7或2008上失败了。
注意:
- 如果我创建一个控制台程序而不是服务,使用PC扬声器,蜂鸣声可以正常工作。
- 即使我启用“允许服务与桌面交互”或将管理员权限分配给服务,蜂鸣声也不能在服务中工作。
我的问题:是否有一种方法可以调用蜂鸣API,使其在服务中工作?谢谢。
这个问题以前也被问过,但没有定论。
我用Delphi写了一个Windows服务,需要在某些条件下发出蜂鸣声。在XP上运行得很好,但在Windows 7或2008上失败了。
注意:
我的问题:是否有一种方法可以调用蜂鸣API,使其在服务中工作?谢谢。
更新:有人在 这里 找到了一种方法。它涉及IOCTL,并可用于驱动程序和服务。
原始答案:
我所知道的唯一与用户交互的方式是让您的服务与一个小型用户代理进程通信,该进程将被添加到HKEY_LOCAL_MACHINE\CurrentUser\Run中以自动运行。
这是在vista和win7中无法直接从服务进行用户交互的常规模式:
MyLittleService.exe无法访问用户。但是它可以通过命名管道与托盘图标实用程序通信。
MyLittleTrayIcon.exe与服务通信,还可以告诉用户使用消息框、蜂鸣和其他方法(Windows声效可能比尝试访问不再保证存在于每台PC上的PC扬声器要好),甚至可以用来控制服务(重新启动它、重新加载配置等)。
在Vista及以上版本中,您无法这样做。服务在不同的会话中运行,因此无法访问扬声器。