Что нового

[Автоматизация] повторение воспроизведения звука

tenitii

Новичок
Сообщения
26
Репутация
0
как можно зделать так чтоб звук воспроизводился пока не нажмеш ок

Код:
While 1
    If FileExists("C:\STAMP") Then
      SoundSetWaveVolume(100)
	  SoundPlay("C:\Windows\media\tada.wav")
      MsgBox(0, '', 'CONTROLLARE STAMPANTE')
      FileDelete("C:\STAMP")
    EndIf
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
Вот так:
Код:
While 1
    If FileExists("C:\STAMP") Then
		SoundSetWaveVolume(100)
		SoundPlay("C:\Windows\media\tada.wav")
		MsgBox(0, '', 'CONTROLLARE STAMPANTE')
		DirRemove ("C:\STAMP")
	EndIf
WEnd
 
Автор
T

tenitii

Новичок
Сообщения
26
Репутация
0
нет не так хочу чтоб звук проигрывал пока не нажмеш ок
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
tenitii
Попробуйте так:
Код:
While 1
	$hFile = FileOpen("C:\STAMP", 2)
	FileClose($hFile)
	If FileExists("C:\STAMP") Then
		$ahCallBack = _CallBack_Init("_Function", 1100)
		MsgBox(0, '', 'CONTROLLARE STAMPANTE')
		_CallBack_Free($ahCallBack)
		If FileDelete("C:\STAMP") Then ExitLoop
	EndIf
	Sleep(10)
WEnd
MsgBox(0, '', 'FileDelete')

Func _Function()
	SoundPlay("C:\Windows\media\tada.wav")
EndFunc   ;==>_Function

Func _CallBack_Init($sFuncName, $iTime, $sParam = "")
	Local $hCallBack = DllCallbackRegister($sFuncName, "int", $sParam)
	Local $aTimer = DllCall("user32.dll", "uint", "SetTimer", _
			"hwnd", 0, "uint", 0, "int", $iTime, "ptr", DllCallbackGetPtr($hCallBack))
	Local $ahCallBack[2] = [$hCallBack, $aTimer[0]]
	Return $ahCallBack
EndFunc   ;==>_CallBack_Init

Func _CallBack_Free($ahCallBack)
	If $ahCallBack[0] <> -1 Then DllCallbackFree($ahCallBack[0])
	If $ahCallBack[1] <> -1 Then DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $ahCallBack[1])
EndFunc   ;==>_CallBack_Free
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Можно сделать все намного проще.

Код:
#NoTrayIcon

If ($CmdLine[0] > 0) And ($CmdLine[1] = '/play') Then
	SoundSetWaveVolume(100)
	While 1
		SoundPlay(@WindowsDir & '\Media\tada.wav', 0)
		Sleep(1000)
	WEnd
EndIf

;If FileExists('C:\STAMP') Then
	If Not @compiled Then
		$PID = Run(@AutoItExe & ' "' & @ScriptFullPath & '" /play' )
	Else
		$PID = Run(@ScriptFullPath & ' /play ')
	EndIf
	MsgBox(0, '', 'CONTROLLARE STAMPANTE')
	If $PID Then
		ProcessClose($PID)
	EndIf
;	DirRemove('C:\STAMP')
;EndIf
 
Автор
T

tenitii

Новичок
Сообщения
26
Репутация
0
всем спасибо все работает как я и хотел !
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,666
Репутация
2,463
Yashied [?]
Можно сделать все намного проще
Таким образом иконка остаётся висеть в трее, лучше проверять окно MsgBox'а. Да и проверка на компиляцию не обязательна:

Код:
If $CmdLine[0] > 0 And $CmdLine[1] = '/play' Then
    SoundSetWaveVolume(100)
    
	While WinExists('Play', 'CONTROLLARE STAMPANTE')
		SoundPlay(@WindowsDir & '\Media\tada.wav', 0)
		Sleep(1000)
	WEnd
	
	Exit
EndIf

;If FileExists('C:\STAMP') Then
    ShellExecute(@ScriptFullPath, '/play')
    MsgBox(0, 'Play', 'CONTROLLARE STAMPANTE')
;   DirRemove('C:\STAMP')
;EndIf
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
CreatoR сказал(а):
Таким образом иконка остаётся висеть в трее...

Я же поставил #NoTrayIcon, а для установки иконки можно использовать TraySetIcon(). А вообще, я бы использовал функцию _WinAPI_PlaySound():

Код:
#Include <WinAPIEx.au3>

;If FileExists('C:\STAMP') Then
	_WinAPI_PlaySound(@WindowsDir & '\Media\tada.wav', BitOR($SND_ASYNC, $SND_FILENAME, $SND_LOOP))
    MsgBox(0, '', 'CONTROLLARE STAMPANTE')
	_WinAPI_PlaySound('', 0)
;   DirRemove('C:\STAMP')
;EndIf


Проще уже некуда.
 
Верх