我正在尝试通过单击Excel 11中的表单控件来触发声音。如果单击事件的处理程序在剪贴板上找到某些文本,则尝试使用sndPlaySound32播放声音。
我已经声明了函数sndPlaySound32,并用(简化)
调用它whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav"
sndPlaySound32 whatSound$, &H0
当我单击控件时Excel是前端应用程序然后一切正常并播放声音(如果在剪贴板上找到目标文本),但如果我将文本放在剪贴板上应用程序,如记事本,当点击发生时,Excel不是前端应用程序,然后第一次单击控件不会产生任何声音。后续点击正常工作。表单上的其他事件对此没有任何问题,并继续正常响应第一次单击。
当Excel不是前端应用程序时,如何在第一次单击控件时播放声音?
编辑11/25/10: 我不能让董事会评论工作。我点击添加评论,但我的评论没有显示,所以这是对Boost的回复。
我认为这比仅通过第一次点击将Excel带到前面更深入,因为首次点击控件时会有一些其他操作成功触发,(而另一个应用程序位于前面),并且一切正常。只有playSound才能在后续点击之前发挥作用。
我已经尝试将playSound命令移动到其他操作列表的前端和末尾(例如字体更改,文本大小调整等),这些操作应该在每次单击时发生,并且还尝试将延迟放入各种各样的地方,但没有快乐。如果我单步执行代码,则在第一次单击时会正确调用playSound过程,但它不会产生声音。
答案 0 :(得分:1)
我认为这里没有解决方法。应用程序在“焦点对准”之前不会接受鼠标事件。如果记事本是焦点,您可以通过第一次单击将焦点从它转移到Excel,然后Excel的事件处理程序将发挥作用并响应后续事件。
你可以(我不知道它是否可能)在整个屏幕上放置透明窗口并解释该上下文中的鼠标点击,并将它们传递给适当的底层窗口。我想是SMOP。
答案 1 :(得分:0)
我终于找到了一个简单,可靠,丑陋的解决方法。由于它不会在第一次点击时播放声音,我只是给它一次机会。所以现在,取代原始帖子中的代码,它看起来像这样:
whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav"
sndPlaySound32 whatSound$, &H0
sndPlaySound32 whatSound$, &H0
它仍然会忽略第一个playSound命令,但每次第一次点击时它都会播放第二个命令。