Что нового

[Окна, Диалоги] Проигрывания звука, при появлении дочернего окна

BAXTEP

Новичок
Сообщения
1
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:
Есть программа, в ней есть система оповещений, в виде всплывающих дочерних окон.
Необходимо, что бы при появлении такого всплывающего окна воспроизводился звук (wav, mp3).
Есть вариант просто заменить стандартный звук windows но не вариант, т.к. хотелось бы уникальный звук именно на это событие.
Программа quik.
Я так понимаю, что надо зациклить "просмотр" всех активных и не активных окон и искать новые по заголовку либо тексту и если нашли нужное окно воспроизвести звук? Примерно как это реализовать?

Примечания:
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Код:
While 1
	WinWait("Заголовок окна") ;ожидание появления указанного окна.
	ShellExecute("Путь к аудио файлу и его название") ;музыкальный файл запустится в проигрывателе указанным по умалчанию в Windows.
	WinWaitClose("Заголовок все того же самого окна") ;ожидание закрытия указанного окна и по его закрытию вновь переход в режим ожидания появления этого окна.
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Выкладываю свой вариант решения задачи. Может, кому пригодится.
Так как Kalisnik ответил раньше, я решил подождать ответа BAXTEP`а, но, похоже, тема повисла!

Код:
Opt("WinTitleMatchMode", 2)

Dim $bActive, $sFile = @WindowsDir & "\media\tada.wav" ; всё что возпроизводит WMP (mp3, wav и т.д.)
;~ Dim $bActive, $sFile = @ScriptDir & "\you_sound.wav" ; всё что возпроизводит WMP (mp3, wav и т.д.)

$oWMP = ObjCreate("WMPlayer.OCX.7")
; подгрузим мелодию в память
$oWMP.Url = $sFile
$oWMP.Settings.Volume = 0
Sleep(250)
; Стоп
$oWMP.Controls.Stop
$oWMP.Settings.Volume = 100

AdlibRegister("_Sound")
HotKeySet("!q", "_Exit") ; Alt+q

While 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc

Func _Sound()
;~ 	If Not $bActive And BitAnd(WinGetState("[CLASS:#32770]", "Выключить компьютер"),2) Then ; Пуск -> Выключить компьютер...
;~ 	If Not $bActive And BitAnd(WinGetState("Безымянный",""),2) Then ; индивидуальный подход
	If Not $bActive And BitAnd(WinGetState("[CLASS:#32770]"),2) Then ; любое диалоговое окно
		$bActive = Not $bActive
		$oWMP.Controls.Play
;~ 	ElseIf $bActive And Not BitAnd(WinGetState("[CLASS:#32770]", "Выключить компьютер"),2) Then ; Пуск -> Выключить компьютер...
;~ 	ElseIf $bActive And Not BitAnd(WinGetState("Безымянный",""),2) Then ; индивидуальный подход
	ElseIf $bActive And Not BitAnd(WinGetState("[CLASS:#32770]"),2) Then ; любое диалоговое окно
		$bActive = Not $bActive
		$oWMP.Controls.Stop
	EndIf
EndFunc
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Garrett
Зачем использовать какие то объекты? Если есть функция SoundPlay
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
SECTOR сказал(а):
Garrett
Зачем использовать какие то объекты? Если есть функция SoundPlay
Дело вкуса!
У меня, например пристрастие к OGG формату! Всю свою аудиобиблиотеку я храню в OGG! :smile:
Отсюда и вариант с объектами. Вдруг у человека другие пристрастия (MIDI, VOC, WMA и т.д.)?
SoundPlay поддерживает только WAV и MP3!
 
Верх