Автор Тема: Плавное увеличение звука при наведении на окно  (Прочитано 675 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 35
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Доброго времени суток, специалисты по AutoIt'у.
Помогите с решением проблемы.

Есть скрипт вывода видео без звука - в беззаголовочном окне.
(нажмите для показа/скрытия)

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


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Русское сообщество AutoIt

Плавное увеличение звука при наведении на окно
« Отправлен: Декабрь 17, 2017, 00:17:34 »

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 401
  • Репутация: 92
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Например так
Код: AutoIt [Выделить]
#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
 


Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 35

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo , не работает.

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

Помечен как лучший ответ пользователем Visors Отправлен Декабрь 18, 2017, 20:25:02

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 401
  • Репутация: 92
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#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В вашем случае лучше писать в стол заказов
« Последнее редактирование: Декабрь 17, 2017, 15:46:17 от Tempo »

Русское сообщество AutoIt

Re: Плавное увеличение звука при наведении на окно
« Ответ #3 Отправлен: Декабрь 17, 2017, 15:40:37 »

Оффлайн Visors [?]

  • Новичок
  • *
  • Сообщений: 35

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo, а вот теперь звук увеличивается плавно.
Спасибо за помощь со скриптом.

Оффлайн zbz [?]

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

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 401
  • Репутация: 92
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#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
 


Русское сообщество AutoIt

Re: Плавное увеличение звука при наведении на окно
« Ответ #6 Отправлен: Декабрь 18, 2017, 17:45:42 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
65 Ответов
39647 Просмотров
Последний ответ Август 09, 2017, 14:27:41
от musicstashall
5 Ответов
5656 Просмотров
Последний ответ Ноябрь 13, 2009, 00:09:20
от CreatoR
7 Ответов
4364 Просмотров
Последний ответ Май 11, 2011, 19:37:38
от Yashied
6 Ответов
7848 Просмотров
Последний ответ Март 20, 2015, 20:52:41
от CtrlSoft
8 Ответов
5008 Просмотров
Последний ответ Июль 01, 2013, 23:19:04
от gecha
6 Ответов
4002 Просмотров
Последний ответ Декабрь 30, 2011, 12:29:14
от Kaster
11 Ответов
4932 Просмотров
Последний ответ Декабрь 30, 2011, 21:41:52
от Poma_007
0 Ответов
2062 Просмотров
Последний ответ Сентябрь 06, 2012, 23:21:27
от Juffin
2 Ответов
2008 Просмотров
Последний ответ Октябрь 18, 2012, 21:52:05
от kasper_sky
8 Ответов
3082 Просмотров
Последний ответ Декабрь 12, 2014, 17:38:46
от Yashied