Воспроизведение звука запускается нажатием на элемент управления формы - PullRequest
0 голосов
/ 19 ноября 2010

Я пытаюсь запустить звук, щелкая элемент управления формой в Excel 11. Обработчик события click пытается воспроизвести звук с помощью sndPlaySound32, если он находит определенный текст в буфере обмена.

Я объявил функцию sndPlaySound32 и вызываю ее (упрощенно)

whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav"  
sndPlaySound32 whatSound$, &H0

Пока Excel является приложением, когда я нажимаю на элемент управления, все работает нормально и воспроизводится звук (если целевой текст найден в буфере обмена), но если я перенесу текст в буфер обмена из другого приложение, такое как Блокнот, где Excel не является фронтальным приложением, когда происходит щелчок, тогда первый щелчок на элементе управления не производит никакого звука. Последующие клики работают нормально. Другие события в форме не имеют проблем с этим и продолжают нормально реагировать на первый щелчок.

Как заставить звук воспроизводиться при первом щелчке элемента управления, если Excel не является фронтальным приложением?

Изменить 25.11.10: Я не могу заставить форум Комментарии работать. Я нажимаю Добавить комментарий, но мои комментарии не отображаются, так что это ответ на Boost.

Я думаю, что это нечто более глубокое, чем просто вывести Excel на первый план одним щелчком, потому что есть несколько других действий, которые успешно запускаются при первом щелчке элемента управления (пока впереди другое приложение), и они все работает просто отлично. Только playSound не работает до последующих кликов.

Я попытался переместить команду playSound как в начало, так и в конец списка других действий (например, изменение шрифта, изменение размера текста и т. Д.), Которые должны выполняться при каждом щелчке, а также попытался поместить задержки в различные места, но нет радости. Если я прошагаю по коду, процедура playSound будет правильно вызвана при первом щелчке, но не издаст звука.

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Не думаю, что здесь есть какое-то решение.Приложение не будет принимать события мыши, пока оно не «в фокусе».Если Блокнот находится в фокусе, вы перенесете фокус с него в Excel одним щелчком мыши, после чего в игру вступят обработчики событий Excel и будут реагировать на последующие события.даже возможно) поставить прозрачные окна на весь экран и интерпретировать щелчки мышью в этом контексте и передавать их соответствующим нижележащим окнам. SMOP , наверное.

0 голосов
/ 27 ноября 2010

Я наконец нашел обходной путь, который прост, надежен и безобразен.Поскольку он не воспроизводит звук при первом щелчке, я просто даю ему еще один шанс.Так что теперь вместо кода в моем исходном посте это выглядит так:

whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav"  
sndPlaySound32 whatSound$, &H0
sndPlaySound32 whatSound$, &H0

Он по-прежнему игнорирует первую команду playSound, но воспроизводит вторую каждый раз при первом нажатии.

...