我在Delphi中编写了一个Windows服务,需要在某些条件下发出蜂鸣声。这适用于XP,但在Windows 7或2008中失败。
注意:
我的问题:有没有办法可以调用beep API,使其在服务中运行?感谢。
答案 0 :(得分:1)
你无法在Vista及以上版本中执行此操作。服务在不同的会话中运行,因此无法访问说话者。
答案 1 :(得分:1)
更新:有人找到了方法here。它涉及IOCTL,可供驱动程序和服务使用。
原始答案:
我知道与用户交互的唯一方法是让您的服务与一个小的用户代理进程通信,该进程将被添加到HKEY_LOCAL_MACHINE \ CurrentUser \ Run以自动运行。
这是vista和win7中的常用模式,其中无法直接从服务进行用户交互:
MyLittleService.exe无权访问该用户。但它可以通过命名管道与托盘图标实用程序进行通信。
MyLittleTrayIcon.exe与服务进行通信,也可以告诉用户用消息框发出信号,通过任何方法发出蜂鸣声(Windows声音效果可能比尝试访问PC扬声器更好,但不保证存在于每台PC上等等,甚至可以用来控制服务(重新启动它,重新加载配置等)。