客户要求我解决以下讨厌的问题。他们有一个自定义软件,该软件倾向于在没有任何明显原因的情况下“左右”显示消息框。比如软件本身就是一个记账程序,当他们取客户的钱时,消息框可能会连续显示3到4次左右。每个消息框都会播放 Windows 默认声音。不幸的是,这个软件的编程方式,它播放的声音类型是完全错误的。例如,当消息本身只是一个信息时,它可能会显示一个警告消息框并播放警告系统声音。这一切对于使用该软件的员工来说是相当烦人的。
我试图联系分发软件的供应商,但我遇到了死胡同。所以现在我正在寻找缓解这个问题的方法。
我最简单的解决方案是建议将扬声器静音,但不幸的是,它们需要有声音才能听到传入的电子邮件,最重要的是,以后能够播放来自它们的语音邮件。所以我的解决方案是以某种方式静音消息框的声音,只为一个进程。
根据我的经验,我知道有两个 API 可能会产生这些声音:MessageBeep和一个较旧的Beep。
我还发现这篇文章解释了如何使用 AppInit_DLLs 来挂钩到系统 API。它工作得很好,除了我需要挂钩的两个 API 来自 User32.dll 而不是作者建议的 kernel32.dll 。
问题部分中还有这篇文章,它提供了从 User32.dll 连接到 API 的大致步骤,但是当我尝试实现它们时,没有足够的信息(据我所知)。
所以我的问题是,有谁知道如何挂钩 User32.dll 模块中的 API?
编辑:附言。忘了提。该软件安装在 Windows 7 Professional 上,禁用了 UAC——因为它与 UAC 不兼容 :)