在Windows 2008/7 / Vista中发出Windows服务蜂鸣声

时间:2011-05-12 16:49:44

标签: windows delphi windows-services beep

之前已经问过这个问题,但没有确定的答案。

我在Delphi中编写了一个Windows服务,需要在某些条件下发出蜂鸣声。这适用于XP,但在Windows 7或2008中失败。

注意:

  1. 如果我使用PC扬声器创建控制台程序而不是服务,则蜂鸣声可以正常工作。
  2. 即使我启用“允许服务与桌面交互”,甚至为服务分配管理员权限,蜂鸣也无法在服务中运行。
  3. 我的问题:有没有办法可以调用beep API,使其在服务中运行?感谢。

2 个答案:

答案 0 :(得分:1)

你无法在Vista及以上版本中执行此操作。服务在不同的会话中运行,因此无法访问说话者。

答案 1 :(得分:1)

更新:有人找到了方法here。它涉及IOCTL,可供驱动程序和服务使用。

原始答案:

我知道与用户交互的唯一方法是让您的服务与一个小的用户代理进程通信,该进程将被添加到HKEY_LOCAL_MACHINE \ CurrentUser \ Run以自动运行。

这是vista和win7中的常用模式,其中无法直接从服务进行用户交互:

  1. MyLittleService.exe无权访问该用户。但它可以通过命名管道与托盘图标实用程序进行通信。

  2. MyLittleTrayIcon.exe与服务进行通信,也可以告诉用户用消息框发出信号,通过任何方法发出蜂鸣声(Windows声音效果可能比尝试访问PC扬声器更好,但不保证存在于每台PC上等等,甚至可以用来控制服务(重新启动它,重新加载配置等)。