Что нового

Плавное увеличение звука при наведении на окно

Visors

Новичок
Сообщения
58
Репутация
0
Доброго времени суток, специалисты по автоиту.
Помогите с решением проблемы.

Есть скрипт вывода видео без звука - в беззаголовочном окне.
Код:
#include <DSEngine.au3>
#include <gdiplus.au3>
#include <winapi.au3>
#include <WindowsConstants.au3>

$hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP);, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetState()

$file = FileOpenDialog("Select video file", "", "All video files (*.avi;*.mpg;*.wmv;*.mov;*.3gp;*.asf;*.mp4;*.flv;*.rv;)")
FileChangeDir(@ScriptDir)

Engine_Startup("DSEngine_UDF.dll")
Engine_LoadFile($file, $hWnd)
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = -3

Engine_Shutdown()

Как при наведении мыши - на это беззаголовочное окно с видео - плавно повысить уровень звука до 100% ?
А если убрать курсор мыши с окна - то звук плавно уменьшится опять до 0.
 

Вложения

  • 1.rar
    63.9 КБ · Просмотры: 6

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Например так
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>

Global $sFile = FileOpenDialog("Select video file", "", "All video files (*.avi;*.mpg;*.wmv;*.mov;*.3gp;*.asf;*.mp4;*.flv;*.rv;)")
If @error Then Exit

Global $fVolume
Global $hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP) ;, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSEMOVE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSELEAVE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Engine_Shutdown()

Func WM_MOUSEMOVE()
	If Not $fVolume Then
		For $i = -10000 To 0
			Engine_SetVolume($i)
		Next
		$fVolume = True
		_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSEMOVE

Func WM_MOUSELEAVE()
	If $fVolume Then
		For $i = 0 To -10000 Step -1
			Engine_SetVolume($i)
		Next
		$fVolume = False
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSELEAVE
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
Tempo , не работает.

Не наблюдается плавности увеличения или уменьшения звука.
При наведении курсора мыши - звук просто резко врубается безо всякой плавности.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>

Global $sFile = FileOpenDialog("Select video file", "", "All video files (*.avi;*.mpg;*.wmv;*.mov;*.3gp;*.asf;*.mp4;*.flv;*.rv;)")
If @error Then Exit

Global $fVolume, $iValue = -10000
Global $hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP) ;, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Engine_Shutdown()

Func WM_MOUSE($hWnd, $iMsg)
    Switch $iMsg
        Case $WM_MOUSEMOVE
            If Not $fVolume Then
                AdlibUnRegister("_VolumeDown")
                AdlibRegister("_VolumeUp", 10)
                $fVolume = True
                _WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
            EndIf
        Case $WM_MOUSELEAVE
            If $fVolume Then
                AdlibUnRegister("_VolumeUp")
                AdlibRegister("_VolumeDown", 10)
                $fVolume = False
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSE

Func _VolumeUp()
    If $iValue < 0 Then
        $iValue += 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeUp")
    EndIf
EndFunc   ;==>_VolumeUp

Func _VolumeDown()
    If $iValue > -10000 Then
        $iValue -= 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeDown")
    EndIf
EndFunc   ;==>_VolumeDown

OffTopic:
В вашем случае лучше писать в стол заказов
 
Автор
V

Visors

Новичок
Сообщения
58
Репутация
0
Tempo, а вот теперь звук увеличивается плавно.
Спасибо за помощь со скриптом.
 

zbz

Новичок
Сообщения
74
Репутация
1
а можно тоже самое, только без открытия FileOpenDialog, то есть воспроизвести конкретный файл (на пример: "C:\video.avi")
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>

Global $sFile = "C:\video.avi"

Global $fVolume, $iValue = -10000
Global $hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP) ;, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Engine_Shutdown()

Func WM_MOUSE($hWnd, $iMsg)
    Switch $iMsg
        Case $WM_MOUSEMOVE
            If Not $fVolume Then
                AdlibUnRegister("_VolumeDown")
                AdlibRegister("_VolumeUp", 10)
                $fVolume = True
                _WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
            EndIf
        Case $WM_MOUSELEAVE
            If $fVolume Then
                AdlibUnRegister("_VolumeUp")
                AdlibRegister("_VolumeDown", 10)
                $fVolume = False
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSE

Func _VolumeUp()
    If $iValue < 0 Then
        $iValue += 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeUp")
    EndIf
EndFunc   ;==>_VolumeUp

Func _VolumeDown()
    If $iValue > -10000 Then
        $iValue -= 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeDown")
    EndIf
EndFunc   ;==>_VolumeDown
 
Верх