Что нового

[Мышь, клавиатура] Как получить данные прокрутки колесика над GUI окном?

kasper_sky

Antivirus
Сообщения
116
Репутация
1
И снова доброго времени суток.

Сегодня я уже интересовался(http://autoit-script.ru/index.php/topic,7867.msg53489.html) у форумчан по поводу создания регулятора громкости для примитивного плеера.

Теперь мне нужно прикрутить изменение громкости на колесико мыши.
Кто знает, как это реализовать?

Код, на всякий случай(пишу примитивно, не ругаться):
Код:
#NoTrayIcon
#include <Sound.au3>
#include <SliderConstants.au3>
Global $file = 0, $sec = -1, $volume


If $CmdLine[0] Then $file = $CmdLine[1]
$temp = StringSplit($file, '\')
If IsArray($temp) Then $f = $temp[$temp[0]]

$open = _SoundOpen($file)
$lenth = StringTrimLeft(_SoundLength($file), 3)
If @error Then Exit


$x = IniRead(@ScriptDir & '\settings.ini', 'position', 'x', 200)
$y = IniRead(@ScriptDir & '\settings.ini', 'position', 'y', 200)
$volpos = IniRead(@ScriptDir & '\settings.ini', 'volume', 'pos', 75)

GUICreate($f, 400, 100, $x, $y)
GUISetFont(12)

$openfilemenu = GUICtrlCreateButton('Открыть', 2, 2, 70, 20)
GUICtrlSetFont(-1, 10)

$l = GUICtrlCreateLabel('', 75, 3, 100, 18)
;~ GUICtrlSetBkColor(-1,0xFF0000)
$volume = GUICtrlCreateSlider(20, 50, 100, 30, $TBS_NOTICKS)
GUICtrlSetData(-1, $volpos)
$volumeplus = GUICtrlCreateButton('+', -10, -10, 10, 10)
$volumeminus = GUICtrlCreateButton('-', -20, -20, 10, 10)

SoundSetWaveVolume($volpos)

Dim $HotKey[2][2]
$HotKey[0][0] = '{UP}'
$HotKey[0][1] = $volumeplus
$HotKey[1][0] = '{DOWN}'
$HotKey[1][1] = $volumeminus
;~ 	$HotKey[2][0] = '{LEFT}'
;~ 	$HotKey[2][1] = $
;~ 	$HotKey[3][0] = '{RIGHT}'
;~ 	$HotKey[3][1] = $
GUISetAccelerators($HotKey)

GUISetState()

_SoundPlay($open)
$c = 1
Do
	$msg = GUIGetMsg()
	Switch $msg
		Case $volumeplus
			$tmp = GUICtrlRead($volume) + 5
			GUICtrlSetData($volume, $tmp)
		Case $volumeminus
			$tmp = GUICtrlRead($volume) - 5
			GUICtrlSetData($volume, $tmp)
		Case $openfilemenu
			MsgBox(0, '', '')
	EndSwitch

	If $c = 2 Then
		$winpos = WinGetPos($f)
		If $winpos[0] <> $x Or $winpos[1] <> $y Then
			Sleep(25)
			$x = $winpos[0]
			$y = $winpos[1]
			IniWrite(@ScriptDir & '\settings.ini', 'position', 'x', $winpos[0])
			IniWrite(@ScriptDir & '\settings.ini', 'position', 'y', $winpos[1])
		EndIf
	EndIf


	$volcnt = GUICtrlRead($volume)
	If $volpos <> $volcnt Then
		Sleep(5)
		$volpos = $volcnt
		SoundSetWaveVolume($volcnt)
	EndIf

	If $c = 2 Then
		$list = ProcessList(@ScriptName)
		If $list[0][0] <> 1 Then
			IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))
			Exit
		EndIf
	EndIf

	If $sec <> @SEC Then
		$sec = @SEC
		$pos = StringTrimLeft(_SoundPos($open), 3)
		GUICtrlSetData($l, $pos & ' / ' & $lenth)
	EndIf

	$c = $c + 1
	If $c = 21 Then $c = 1

	Sleep(50)
Until $msg = -3

_SoundStop($open)

IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
прикрутить изменение громкости на колесико мыши
Когда фокус падает на слайдер, тогда можно колесиком мыши регулировать громкость.

Так ?:
Код:
#NoTrayIcon
#include <Sound.au3>
#include <SliderConstants.au3>
Global $file = 0, $sec = -1, $volume
Global Const $WM_MOUSEWHEEL = 0x020A ;Добавлено


If $CmdLine[0] Then $file = $CmdLine[1]
$temp = StringSplit($file, '\')
If IsArray($temp) Then $f = $temp[$temp[0]]

$open = _SoundOpen($file)
$lenth = StringTrimLeft(_SoundLength($file), 3)
If @error Then Exit


$x = IniRead(@ScriptDir & '\settings.ini', 'position', 'x', 200)
$y = IniRead(@ScriptDir & '\settings.ini', 'position', 'y', 200)
$volpos = IniRead(@ScriptDir & '\settings.ini', 'volume', 'pos', 75)

GUICreate($f, 400, 100, $x, $y)
GUISetFont(12)

$openfilemenu = GUICtrlCreateButton('Открыть', 2, 2, 70, 20)
GUICtrlSetFont(-1, 10)

$l = GUICtrlCreateLabel('', 75, 3, 100, 18)
;~ GUICtrlSetBkColor(-1,0xFF0000)
$volume = GUICtrlCreateSlider(20, 50, 100, 30, $TBS_NOTICKS)
GUICtrlSetData(-1, $volpos)
$volumeplus = GUICtrlCreateButton('+', -10, -10, 10, 10)
$volumeminus = GUICtrlCreateButton('-', -20, -20, 10, 10)

SoundSetWaveVolume($volpos)

Dim $HotKey[2][2]
$HotKey[0][0] = '{UP}'
$HotKey[0][1] = $volumeplus
$HotKey[1][0] = '{DOWN}'
$HotKey[1][1] = $volumeminus
;~  $HotKey[2][0] = '{LEFT}'
;~  $HotKey[2][1] = $
;~  $HotKey[3][0] = '{RIGHT}'
;~  $HotKey[3][1] = $
GUISetAccelerators($HotKey)

GUISetState()

GUIRegisterMsg($WM_MOUSEWHEEL, "MY_WM_MOUSEWHEEL") ;Добавлено

_SoundPlay($open)
$c = 1
Do
    $msg = GUIGetMsg()
    Switch $msg
        Case $volumeplus
            $tmp = GUICtrlRead($volume) + 5
            GUICtrlSetData($volume, $tmp)
        Case $volumeminus
            $tmp = GUICtrlRead($volume) - 5
            GUICtrlSetData($volume, $tmp)
        Case $openfilemenu
            MsgBox(0, '', '')
    EndSwitch

    If $c = 2 Then
        $winpos = WinGetPos($f)
        If $winpos[0] <> $x Or $winpos[1] <> $y Then
            Sleep(25)
            $x = $winpos[0]
            $y = $winpos[1]
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'x', $winpos[0])
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'y', $winpos[1])
        EndIf
    EndIf


    $volcnt = GUICtrlRead($volume)
    If $volpos <> $volcnt Then
        Sleep(5)
        $volpos = $volcnt
        SoundSetWaveVolume($volcnt)
    EndIf

    If $c = 2 Then
        $list = ProcessList(@ScriptName)
        If $list[0][0] <> 1 Then
            IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))
            Exit
        EndIf
    EndIf

    If $sec <> @SEC Then
        $sec = @SEC
        $pos = StringTrimLeft(_SoundPos($open), 3)
        GUICtrlSetData($l, $pos & ' / ' & $lenth)
    EndIf

    $c = $c + 1
    If $c = 21 Then $c = 1

    Sleep(50)
Until $msg = -3

_SoundStop($open)

IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))

;Добавлено
Func MY_WM_MOUSEWHEEL($hWnd, $Msg, $wParam, $lParam)
    Local $state = BitShift($wParam, 16) ; -120 is up, 120 is down
	If $state = -120 Then GUICtrlSetData($volume, GUICtrlRead($volume) - 10)
	If $state = 120 Then GUICtrlSetData($volume, GUICtrlRead($volume) + 10)
EndFunc
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Zaramot
А как-нибудь к обычному виду MY_WM_MOUSEWHEEL() можно привести, как я сделал в предыдущем случае?
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
kasper_sky

рабочий пример WM_MOUSEWHEEL, прикручивай сам

Код:
Global $k1=0
Global $k2=0
Global Const $WM_MOUSEWHEEL = 0x020A

GUIRegisterMsg(0x020A , "WM_MOUSEWHEEL")
$Gui = GUICreate("Крути колесо мыши вниз / вверх",  370, 160)
GUICtrlCreateLabel('Функция WM_MOUSEWHEEL срабатывает в момент вращения колёсика мыши. Попробуйте удерживать Ctrl, Shift, кнопки мыши при вращении колёсика, код спец-клавиш тоже возвращается. Можно использовать для установки числовых параметров в инпутах c GUICtrlCreateUpdown.', 5, 5, 360, 75)
$Label1 = GUICtrlCreateLabel("колесо мыши сдвинулось вверх 0 раз", 10, 90, 226, 17)
$Label2 = GUICtrlCreateLabel("колесо мыши сдвинулось вниз 0 раз", 10, 110, 226, 17)
$Label3 = GUICtrlCreateLabel("", 10, 130, 226, 17)
$Input=GUICtrlCreateInput("", 240, 95, 100, 21)
GUISetState ()

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = -3
			Exit
	EndSelect
WEnd

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
    If $MsgId = $WM_MOUSEWHEEL Then
        $Delta = BitShift($wParam, 16)
        $KeysHeld = BitAND($wParam, 0xFFFF)
        $X = BitShift($lParam, 16)
        $Y = BitAND($lParam, 0xFFFF)
		GUICtrlSetData($Label3, "Delta: "&$Delta&", Клавиша: "&$KeysHeld&",     X: "&$X&", Y: "&$Y)
		
        If $Delta > 0 Then
			$k1+=1
			GUICtrlSetData($Label1, 'колесо мыши сдвинулось вверх '&$k1&' раз')
			WinSetTitle($Gui, '', 'вверх '&$k1&' раз, вниз '&$k2&' раз')
			GUICtrlSetData($Input, $k1&' - '&$k2&' = '&$k1-$k2)
        Else
			$k2+=1
			GUICtrlSetData($Label2, 'колесо мыши сдвинулось вниз '&$k2&' раз')
			WinSetTitle($Gui, '', 'вверх '&$k1&' раз, вниз '&$k2&' раз')
			GUICtrlSetData($Input, $k1&' - '&$k2&' = '&$k1-$k2)
        EndIf
    EndIf
EndFunc
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
AZJIO
Я новичок. И не могу понять, как работают GuiRegisterMsg() и MY_WM_MOUSEWHEEL().

Пытался выставлять реакцию, если GuiGetMsg=120 и GuiGetMsg=-120 - ничего не получил.
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
kasper_sky
Зачем понимать как она работает, я сам не понимаю. Просто вставляешь регистрацию функции и саму функцию. Внутри функции действия меняешь на свои, к примеру прочитал положение слайдера, добавил к нему 1 и у становил новое значение. Если это размер регулирует размер гуи, то получил размер, прибавил 1, установил новый размер. Если это цвет, то прочитал текущий цвет красного/синего/зелёного, добавил 1 установил новый цвет.

Вот добавил в твой нерабочий скрипт, вроде работает.

Код:
#NoTrayIcon
#include <Sound.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>
Global $file = 0, $sec = -1, $volume


If $CmdLine[0] Then $file = $CmdLine[1]
$temp = StringSplit($file, '\')
If IsArray($temp) Then $f = $temp[$temp[0]]

$open = _SoundOpen($file)
$lenth = StringTrimLeft(_SoundLength($file), 3)
If @error Then Exit


$x = IniRead(@ScriptDir & '\settings.ini', 'position', 'x', 200)
$y = IniRead(@ScriptDir & '\settings.ini', 'position', 'y', 200)
$volpos = IniRead(@ScriptDir & '\settings.ini', 'volume', 'pos', 75)

$Gui=GUICreate($f, 400, 100, $x, $y)
GUISetFont(12)

$openfilemenu = GUICtrlCreateButton('Открыть', 2, 2, 70, 20)
GUICtrlSetFont(-1, 10)

$l = GUICtrlCreateLabel('', 75, 3, 100, 18)
;~ GUICtrlSetBkColor(-1,0xFF0000)
$volume = GUICtrlCreateSlider(20, 50, 100, 30, $TBS_NOTICKS)
GUICtrlSetData(-1, $volpos)
$volumeplus = GUICtrlCreateButton('+', -10, -10, 10, 10)
$volumeminus = GUICtrlCreateButton('-', -20, -20, 10, 10)

SoundSetWaveVolume($volpos)

Dim $HotKey[2][2]
$HotKey[0][0] = '{UP}'
$HotKey[0][1] = $volumeplus
$HotKey[1][0] = '{DOWN}'
$HotKey[1][1] = $volumeminus
;~  $HotKey[2][0] = '{LEFT}'
;~  $HotKey[2][1] = $
;~  $HotKey[3][0] = '{RIGHT}'
;~  $HotKey[3][1] = $
GUISetAccelerators($HotKey)

GUISetState()

GUIRegisterMsg(0x020A , "WM_MOUSEWHEEL")

_SoundPlay($open)
$c = 1
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $volumeplus
            $tmp = GUICtrlRead($volume) + 5
            GUICtrlSetData($volume, $tmp)
        Case $volumeminus
            $tmp = GUICtrlRead($volume) - 5
            GUICtrlSetData($volume, $tmp)
        Case $openfilemenu
			$OpenFile = FileOpenDialog('Открыть', @WorkingDir , 'Медиа файл (*.mp3;*.wav;*.ogg;*.wma)', '', '', $Gui)
			If @error Then ContinueLoop
			GUICtrlSetData($l, $OpenFile)
			SoundPlay($OpenFile, 0)
        Case -3
            Exit 
    EndSwitch

    If $c = 2 Then
        $winpos = WinGetPos($f)
        If $winpos[0] <> $x Or $winpos[1] <> $y Then
            Sleep(25)
            $x = $winpos[0]
            $y = $winpos[1]
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'x', $winpos[0])
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'y', $winpos[1])
        EndIf

        ; $list = ProcessList(@AutoItExe)
        ; If $list[0][0] <> 1 Then
            ; IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))
            ; Exit
        ; EndIf
    EndIf


    $volcnt = GUICtrlRead($volume)
    If $volpos <> $volcnt Then
        Sleep(5)
        $volpos = $volcnt
        SoundSetWaveVolume($volcnt)
    EndIf

    If $sec <> @SEC Then
        $sec = @SEC
        $pos = StringTrimLeft(_SoundPos($open), 3)
        GUICtrlSetData($l, $pos & ' / ' & $lenth)
    EndIf

    $c += 1
    If $c = 21 Then $c = 1

    Sleep(50)
WEnd

_SoundStop($open)

IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))

 

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
    If $MsgId = $WM_MOUSEWHEEL Then
        $Delta = BitShift($wParam, 16)
        $KeysHeld = BitAND($wParam, 0xFFFF)
        $X = BitShift($lParam, 16)
        $Y = BitAND($lParam, 0xFFFF)
		
        If $Delta > 0 Then
            $tmp = GUICtrlRead($volume) + 5
            GUICtrlSetData($volume, $tmp)
        Else
            $tmp = GUICtrlRead($volume) - 5
            GUICtrlSetData($volume, $tmp)
        EndIf
    EndIf
EndFunc
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
AZJIO
У меня скрипт отлично работает.

По поводу твоего кода - он для меня еще муторнее.
Когда я спрашивал
А как-нибудь к обычному виду MY_WM_MOUSEWHEEL() можно привести, как я сделал в предыдущем случае?
я имел ввиду как избавится от GuiRegisterMsg().
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
У меня твой скрипт просто вылетал, даже не понимаю зачем толкать проверку сущестоввания процесса, которая не даёт запускать файл нескомпилированным. Используй OnAutoItExitRegister для регистрации функции при выходе. Когда скрипт закрываешь произойдёт сохранение, не проверяя существование процесса каждую секунду.


kasper_sky [?]
По поводу твоего кода - он для меня еще муторнее.
это я вообще не понимаю, если тебе код страшен или муторен или утомителен вынеси его в отдельный файл наподобии #include <mytoren.au3> и вставляй туда. В своём скрипте ты его видеть не будешь. Тот же Sound.au3 по твоим понятием будет ещё муторнее если вставишь в свой код.

я имел ввиду как избавится от GuiRegisterMsg()
в чём смысл избавления? Ты хочешь прочитать (GUICtrlRead) непосредственно с мыши количество прокрученных шагов? Думаю винда не сохраняет это где-то. Именно функции отслеживает и выдаёт событие, но не сохраняет посекундно.

Кстати, чтоб не гонять в цикле чтение слайдера используй WM_HSCROLL или WM_VSCROLL

WM_HSCROLL
Код:
Global $k=0
GUIRegisterMsg(0x0114 , "WM_HSCROLL")
$GUI = GUICreate("Горизонтальный", 320, 185)

$slider1 = GUICtrlCreateSlider(10, 5, 200, 30)
GUICtrlSetLimit(-1, 185, 0)
$hSlider_Handle1 = GUICtrlGetHandle(-1)

$slider2 = GUICtrlCreateSlider(10, 35, 200, 30)
GUICtrlSetLimit(-1, 185, 0)
$hSlider_Handle2 = GUICtrlGetHandle(-1)

GUICtrlCreateLabel('     WM_HSCROLL - команда позволяет получить величину регулятора в момент задействования, а не зацикливать проверку состояния.'&@CRLF&@CRLF&'     Если горизонтальных регуляторов более одного, то функция срабатывает при задействовании любого из горизонтальных регуляторов.', 10, 70, 300, 105)
$condition = GUICtrlCreateLabel('', 220, 5, 200, 40)
GUICtrlSetFont(-1,22)
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
	#forceref $Msg, $wParam, $lParam
	Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
	Local $value = BitShift($wParam, 16)
	
	Switch $lParam
		Case $hSlider_Handle1
		   If $nScrollCode = 5 Then GUICtrlSetData($condition,'1 - '&$value)
			WinSetTrans($GUI,"",255-GUICtrlRead($slider1))
		Case $hSlider_Handle2
		   If $nScrollCode = 5 Then GUICtrlSetData($condition,'2 - '&$value)
	EndSwitch
	
	$k+=1
	WinSetTitle($Gui, '', 'Вызов ' &$k& ' раз, c='&$nScrollCode&', v='&$value)

	Return 'GUI_RUNDEFMSG'
EndFunc

WM_VSCROLL
Код:
Global $k=0
GUIRegisterMsg(0x0115 , "WM_VSCROLL")
$GUI = GUICreate("Вертикальный", 350, 245)

$slider1 = GUICtrlCreateSlider(15, 20, 30, 200, 0x0002)
GUICtrlSetLimit(-1, 185, 0)
$hSlider_Handle1 = GUICtrlGetHandle(-1)

$slider2 = GUICtrlCreateSlider(55, 20, 30, 200, 0x0002)
GUICtrlSetLimit(-1, 185, 0)
$hSlider_Handle2 = GUICtrlGetHandle(-1)

GUICtrlCreateLabel('     WM_VSCROLL - команда позволяет получить величину регулятора в момент задействования, а не зацикливать проверку состояния.'&@CRLF&@CRLF&'     Если вертикальных регуляторов более одного, то функция срабатывает при задействовании любого из вертикальных регуляторов', 100, 10, 245, 180)
$condition = GUICtrlCreateLabel('', 105, 160, 200, 70)
GUICtrlSetFont(-1,32)
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
	#forceref $Msg, $wParam, $lParam
	Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
	Local $value = BitShift($wParam, 16)
	
	Switch $lParam
		Case $hSlider_Handle1
		   If $nScrollCode = 5 Then GUICtrlSetData($condition,'1 - '&$value)
			WinSetTrans($GUI,"",255-GUICtrlRead($slider1))
		Case $hSlider_Handle2
		   If $nScrollCode = 5 Then GUICtrlSetData($condition,'2 - '&$value)
	EndSwitch
	
	$k+=1
	WinSetTitle($Gui, '', 'Вызов ' &$k& ' раз, c='&$nScrollCode&', v='&$value)

	Return 'GUI_RUNDEFMSG'
EndFunc

Мой пример
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#NoTrayIcon
Global $file
$Gui = GUICreate("Player", 340, 100, -1, -1, -1, $WS_EX_ACCEPTFILES)
$CatchDrop = GUICtrlCreateLabel("", -1, -1, 340, 100)
GUICtrlSetState(-1, $GUI_DISABLE + $GUI_DROPACCEPTED)
GUISetIcon(@SystemDir&"\wmploc.dll", 0)
GUICtrlCreateLabel("используйте drag-and-drop", 10, 5, 200, 18)
$LabNameSize = GUICtrlCreateLabel("Это значит кинь сюда файл", 10, 20, 270, 34)
$open = GUICtrlCreateButton("Open", 10, 60, 21, 21, $BS_ICON)
GUICtrlSetImage(-1, 'shell32.dll', 4, 0)
$play = GUICtrlCreateButton("Play "& ChrW('0x25BA'), 40, 60, 21, 21, $BS_ICON)
GUICtrlSetImage(-1, 'shell32.dll', -138, 0)
GUICtrlSetFont (-1,-1, -1, -1, 'Arial')
GUICtrlSetTip(-1, "Воспроизвести сначала")
$slider = GUICtrlCreateSlider(290, 0, 30, 100, 0x0002)
GUICtrlSetLimit(-1, 100, 0)
GUICtrlSetData(-1, 100-50)
SoundSetWaveVolume(50)
GUISetState()

GUIRegisterMsg(0x0115 , 'WM_VSCROLL')
GUIRegisterMsg(0x020A , "WM_MOUSEWHEEL")

While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $open
			$tmp = FileOpenDialog("Выберите файл", "", "Медиафайлы (*.mp3)", 1)
			If @error Then ContinueLoop
			$file=$tmp
			_pl()
		Case $play
			If Not $file = "" Then
				SoundPlay($file, 0)
			Else
				MsgBox(64, "Выгодное предложение", "Не желаете открыть файл?")
			EndIf
        Case -13
				$file=@GUI_DRAGFILE
				_pl()
		Case $Gui_Event_Close
			ExitLoop
	EndSwitch
WEnd

Func _pl()
GUICtrlSetColor($LabNameSize,0xff0000)
GUICtrlSetFont($LabNameSize,-1, 700)
$namefiles=StringRegExp($file, "(^.*)\\(.*)$", 3)
GUICtrlSetData($LabNameSize, $namefiles[1]&' ('&Ceiling (FileGetSize ( $file )/1048576)&' Мб)')
SoundPlay($file)
EndFunc

Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
	#forceref $Msg, $wParam, $lParam
	Local $nScrollCode = BitAND($wParam, 0x0000FFFF), $value = BitShift($wParam, 16)
	If $nScrollCode = 5 Then SoundSetWaveVolume(100-$value)
	Return 'GUI_RUNDEFMSG'
EndFunc

; реакция регулятора на колёсико мыши
Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
    If $MsgId = $WM_MOUSEWHEEL Then
		Local $value
        If BitShift($wParam, 16) > 0 Then
            $value = GUICtrlRead($slider) - 5
            GUICtrlSetData($slider, $value)
			SoundSetWaveVolume(100-$value)
        Else
            $value = GUICtrlRead($slider) + 5
            GUICtrlSetData($slider, $value)
			SoundSetWaveVolume(100-$value)
        EndIf
    EndIf
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
А так ?
Код:
#NoTrayIcon
#include <Sound.au3>
#include <SliderConstants.au3>
#include <MouseOnEvent.au3>  ;Добавлено

Global $file = 0, $sec = -1, $volume

If $CmdLine[0] Then $file = $CmdLine[1]
$temp = StringSplit($file, '\')
If IsArray($temp) Then $f = $temp[$temp[0]]

$open = _SoundOpen($file)
$lenth = StringTrimLeft(_SoundLength($file), 3)
If @error Then Exit


$x = IniRead(@ScriptDir & '\settings.ini', 'position', 'x', 200)
$y = IniRead(@ScriptDir & '\settings.ini', 'position', 'y', 200)
$volpos = IniRead(@ScriptDir & '\settings.ini', 'volume', 'pos', 75)

GUICreate($f, 400, 100, $x, $y)
GUISetFont(12)

$openfilemenu = GUICtrlCreateButton('Открыть', 2, 2, 70, 20)
GUICtrlSetFont(-1, 10)

$l = GUICtrlCreateLabel('', 75, 3, 100, 18)
;~ GUICtrlSetBkColor(-1,0xFF0000)
$volume = GUICtrlCreateSlider(20, 50, 100, 30, $TBS_NOTICKS)
GUICtrlSetData(-1, $volpos)
$volumeplus = GUICtrlCreateButton('+', -10, -10, 10, 10)
$volumeminus = GUICtrlCreateButton('-', -20, -20, 10, 10)

SoundSetWaveVolume($volpos)

Dim $HotKey[2][2]
$HotKey[0][0] = '{UP}'
$HotKey[0][1] = $volumeplus
$HotKey[1][0] = '{DOWN}'
$HotKey[1][1] = $volumeminus
;~  $HotKey[2][0] = '{LEFT}'
;~  $HotKey[2][1] = $
;~  $HotKey[3][0] = '{RIGHT}'
;~  $HotKey[3][1] = $
GUISetAccelerators($HotKey)

GUISetState()

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT , 'VolumeDown') ;Добавлено
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, 'VolumeUp') ;Добавлено

_SoundPlay($open)
$c = 1
Do
    $msg = GUIGetMsg()
    Switch $msg
        Case $volumeplus
            $tmp = GUICtrlRead($volume) + 5
            GUICtrlSetData($volume, $tmp)
        Case $volumeminus
            $tmp = GUICtrlRead($volume) - 5
            GUICtrlSetData($volume, $tmp)
        Case $openfilemenu
            MsgBox(0, '', '')
    EndSwitch

    If $c = 2 Then
        $winpos = WinGetPos($f)
        If $winpos[0] <> $x Or $winpos[1] <> $y Then
            Sleep(25)
            $x = $winpos[0]
            $y = $winpos[1]
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'x', $winpos[0])
            IniWrite(@ScriptDir & '\settings.ini', 'position', 'y', $winpos[1])
        EndIf
    EndIf


    $volcnt = GUICtrlRead($volume)
    If $volpos <> $volcnt Then
        Sleep(5)
        $volpos = $volcnt
        SoundSetWaveVolume($volcnt)
    EndIf

    If $c = 2 Then
        $list = ProcessList(@ScriptName)
        If $list[0][0] <> 1 Then
            IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))
            Exit
        EndIf
    EndIf

    If $sec <> @SEC Then
        $sec = @SEC
        $pos = StringTrimLeft(_SoundPos($open), 3)
        GUICtrlSetData($l, $pos & ' / ' & $lenth)
    EndIf

    $c = $c + 1
    If $c = 21 Then $c = 1

    Sleep(50)
Until $msg = -3

_SoundStop($open)

IniWrite(@ScriptDir & '\settings.ini', 'volume', 'pos', GUICtrlRead($volume))

 ;Добавлено
Func VolumeUp()
	GUICtrlSetData($volume, GUICtrlRead($volume) + 10)
EndFunc

 ;Добавлено
Func VolumeDown()
	GUICtrlSetData($volume, GUICtrlRead($volume) - 10)
EndFunc


MouseSetOnEvent UDF
 
Верх