Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 2008/7/Vista中使Windows服务发出嘟嘟声_Windows_Delphi_Windows Services_Beep - Fatal编程技术网

在Windows 2008/7/Vista中使Windows服务发出嘟嘟声

在Windows 2008/7/Vista中使Windows服务发出嘟嘟声,windows,delphi,windows-services,beep,Windows,Delphi,Windows Services,Beep,这个问题以前有人问过,但没有确切的答案 我已经在Delphi中编写了一个Windows服务,它需要在特定条件下生成蜂鸣音。这在XP上运行良好,但在Windows7或2008中失败 注: 如果我创建一个控制台程序而不是使用PC扬声器的服务,那么“哔哔”声就可以工作 即使我启用“允许服务与桌面交互”或甚至为服务分配管理员权限,Beep也无法在服务中工作 我的问题:有没有一种方法可以调用beep API,使其在服务中工作?谢谢。在Vista及更高版本中,您无法执行此操作。服务在不同的会话中运行,因此无

这个问题以前有人问过,但没有确切的答案

我已经在Delphi中编写了一个Windows服务,它需要在特定条件下生成蜂鸣音。这在XP上运行良好,但在Windows7或2008中失败

注:

  • 如果我创建一个控制台程序而不是使用PC扬声器的服务,那么“哔哔”声就可以工作

  • 即使我启用“允许服务与桌面交互”或甚至为服务分配管理员权限,Beep也无法在服务中工作

  • 我的问题:有没有一种方法可以调用beep API,使其在服务中工作?谢谢。

    在Vista及更高版本中,您无法执行此操作。服务在不同的会话中运行,因此无法访问扬声器。

    更新:有人找到了方法。它涉及IOCTL,可供驾驶员和服务人员使用

    原始答复:

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

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

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

  • MyLittleTrayIcon.exe与服务进行通信,还可以告知用户使用消息框、通过任何方法发出嘟嘟声(windows sound effects可能比尝试访问不再保证在每台PC上存在的PC扬声器更好)等向用户发送信号,甚至可以用于控制服务(重新启动,重新加载配置等)


  • 那么,他们不能启动一个单独的EXE来发出嘟嘟声吗?@Hossein,一个单独的EXE通常会在启动它的进程的同一个会话下运行。该服务需要为某个交互用户找到一个会话,模拟该用户的凭据,然后在另一个会话中运行产生噪音的进程。David/Rob-为什么我们不需要在注册表中添加一个trayicon.exe迷你应用程序,以便为每个登录的用户自动运行?VMWare和Interbase,而现在所有其他服务都有一个托盘图标应用程序,只需让它发出嘟嘟声即可。(实际上,我把它作为一个答案)@沃伦:很明显,这就是怎么做的。但问题似乎是想要在一项服务中做到这一点。@David-这项服务实际上是一个监控软件,所以警报是主要功能。目前,它使用电子邮件或短信发送警报,使用GSM电话-但有时,没有互联网或GSM电话关机-这就是问题所在我需要发出呼机警报。“允许服务与桌面交互”在Windows 6.0及以后版本中不起作用。机器是否有人登录过?@Paul Betts-不一定,如果电脑重新启动,服务仍将自动启动。但是,如果用户希望配置软件,则可以登录。谢谢.P,谢谢您的建议。我确实有一个托盘图标来显示气泡警报,因此我可以您可能会使托盘图标发出嘟嘟声,但一个问题是,除非用户登录,否则它将无法工作。“小用户代理进程”-即使不登录,此代理也可以运行吗?据我所知,不,如果用户未登录,它将不会运行。但Microsoft已主动阻止您执行任何其他操作。P-我想系统托盘方法是最好的,除非我能找到一个连接有蜂鸣器的特殊USB设备并从服务中发出声音。;)从后台服务发短信到手机怎么样?:-)然后你可以通知那些听不到嘟嘟声的人。嘟嘟声实际上是在短信设备不工作时通知人们。托盘方法不完整,因为用户必须登录。;)