1 (изменено: andysss, 2011-06-17 22:51:54)

Тема: AHK: Регулятор громкости в windows 7

Есть такой код:

^WheelUp::
^Up::
{
    MyChangeVolume()
    Send {Volume_up}
}
return

^WheelDown::
^Down::
{
    MyChangeVolume()
    Send {Volume_down}
}
return

MyChangeVolume()
{
    Process, Exist, SndVol.exe
    SndVolPID = %ErrorLevel%
    If SndVolPID = 0
    {
        Run, SndVol.exe -f, ,, SndVolPID
        Sleep, 120
    }
    IfWinNotActive,ahk_pid %SndVolPID%, ,WinActivate, ahk_pid %SndVolPID%
    return
}

Подскажите как мне его сместить в правый нижний угол над часами и заставить скрываться через секунду. И можно его сделать не таким громоздким, типа чтобы был просто ползунок какой нибудь. На XP был маленький аккуратный...

2

Re: AHK: Регулятор громкости в windows 7

Кого его? Над какими часами? Что значит громоздким? И что такое sndvol.exe?
Одни вопросы.

3 (изменено: andysss, 2011-06-18 11:07:52)

Re: AHK: Регулятор громкости в windows 7

По хоткею регулятор громкости появляется слева. Как его перенести над часами в трее и скрыть через секунду. sndvol - стандартный регулятор громкости.

4

Re: AHK: Регулятор громкости в windows 7

^WheelUp::
^Up::
   SetTimer, close_if_idle, Off
   {
      changevolume()
      Send {Volume_Up}
   }
   SetTimer, close_if_idle, 1000
   Return

^WheelDown::
^Down::
   SetTimer, close_if_idle, Off
   {
      changevolume()
      Send {Volume_Down}
   }
   SetTimer, close_if_idle, 1000
   Return

   changevolume()
      {
         Process, Exist, SndVol.exe
         SndVolPID = %ErrorLevel%
         If SndVolPID = 0
            Run, SndVol.exe -f 66061452 4116
         Return
      }

close_if_idle:
   WinClose, ahk_class #32770
   Return

5

Re: AHK: Регулятор громкости в windows 7

Спасибо. То что нужно!

6 (изменено: Zanoza, 2011-06-18 14:08:11)

Re: AHK: Регулятор громкости в windows 7

close_if_idle:
   WinClose, ahk_class #32770
   Return

ahk_class #32770 -не одно окно в семерке! например попробуйте удалить какойто файл с запущенным скриптом!

Win10 x64

7

Re: AHK: Регулятор громкости в windows 7

Да, и теперь микшер звука с настройками гасит((...

8 (изменено: Grey, 2011-06-19 03:23:50)

Re: AHK: Регулятор громкости в windows 7

2 andysss Sorry :

...

   changevolume()
      {
         Process, Exist, SndVol.exe
         If %ErrorLevel% = 0
            Run, SndVol.exe -f 66061452 4116
         Return
      }
 
close_if_idle:
   Process, Close, SndVol.exe
   SetTimer, close_if_idle, Off
   Return

9

Re: AHK: Регулятор громкости в windows 7

Grey спасибо. А можно сделать так чтобы в полноэкранном режиме регулятор громкости не появлялся? Допустим в игре регулируешь громкость - появляется регулятор и выкидывает на рабочий стол.

10

Re: AHK: Регулятор громкости в windows 7

; создаём список приложений
GroupAdd, MyGroup, ahk_class TTOTAL_CMD ; к примеру окно тотал коммандера будет изключением
GroupAdd, MyGroup, ahk_class ; указываем класс второго приложения
GroupAdd, MyGroup, ahk_class ; и т.д.
Return

^WheelUp::
^Up::
   IfWinActive, ahk_group MyGroup
      PostMessage, 0x319,, 10 << 16,, Program Manager ; 0x319 - WM_APPCOMMAND, 10 - APPCOMMAND_VOLUME_UP
   Else
      {
         SetTimer, close_if_idle, 1000
         changevolume()
         Send, {Volume_Up}
      }
   Return

^WheelDown::
^Down::
   IfWinActive, ahk_group MyGroup
      PostMessage, 0x319,, 9 << 16,, Program Manager ; 9 - APPCOMMAND_VOLUME_DOWN
   Else
      {
         SetTimer, close_if_idle, 1000
         changevolume()
         Send, {Volume_Down}
      }
   Return

^MButton::
^Enter::
   IfWinActive, ahk_group MyGroup
      PostMessage, 0x319,, 8 << 16,, Program Manager ; 8 - APPCOMMAND_VOLUME_MUTE
   Else
      {
         SetTimer, close_if_idle, 1000
         changevolume()
         Send, {Volume_Mute}
      }
   Return

changevolume()
{
   Process, Exist, SndVol.exe
   If %ErrorLevel% = 0
      Run, SndVol.exe -f 66061452 4116
   Return
}
 
close_if_idle:
   Process, Close, SndVol.exe
   SetTimer, close_if_idle, Off
   Return

11

Re: AHK: Регулятор громкости в windows 7

Добрый день.

Сделал такой регулятор громкости в Windows 10:

changevolume()
{
   Process, Exist, SndVol.exe
   If %ErrorLevel% = 0
      Run, SndVol.exe -f 66061452 4116
   Return
}

Это ползунок от Win7, он вызывается по горячей клавише и появляется посредине панели задач внизу. Подскажите, как сделать, чтобы он появлялся над динамиком в трее Win10.

12

Re: AHK: Регулятор громкости в windows 7

А что означают цифры 66061452 4116 ?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Регулятор громкости в windows 7

teadrinker
Device identifier

14

Re: AHK: Регулятор громкости в windows 7

И где там искать? Там же вроде про другое приложение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: stuermer, 2021-12-17 21:36:46)

Re: AHK: Регулятор громкости в windows 7

teadrinker
Нашел, это координаты, 3й параметр не нужен.

16 (изменено: __Михаил__, 2021-12-17 23:53:57)

Re: AHK: Регулятор громкости в windows 7

stuermer

Тогда всё очень даже просто.

F2::
ChangeVolume(A_ScreenWidth-150, A_ScreenHeight)
Return

ChangeVolume(x,y){
 Process, Exist, SndVol.exe
 If (ErrorLevel = 0){
  P := y * 65536 + x
  Run, SndVol.exe -f %P%
 }
}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

17

Re: AHK: Регулятор громкости в windows 7

__Михаил__
Да, уже сделал похожим образом.

18

Re: AHK: Регулятор громкости в windows 7

Думаю мой код верный. Можно конечно как по ссылке, через костыль, но зачем это нужно?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

19

Re: AHK: Регулятор громкости в windows 7

Проще и правильнее так:

F2:: ChangeVolume(A_ScreenWidth-150, A_ScreenHeight)

ChangeVolume(x,y){
   Run, % "SndVol.exe -f " . x|y << 16
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20 (изменено: stuermer, 2021-12-19 21:33:45)

Re: AHK: Регулятор громкости в windows 7

teadrinker
Проще и понятнее, как было. Только оба примера без Return в функции почему-то.

21

Re: AHK: Регулятор громкости в windows 7

stuermer пишет:

Проще и понятнее, как было

Не очень понял, что имеете в виду. Я показываю, как правильно. Return в функции использовать не обязательно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: Регулятор громкости в windows 7

teadrinker
Это уже вопрос реторический, что правильно это по-непонятному.
Функция должна что-то возвращать по определению, поэтому грамотней написать просто Return без значения.

23

Re: AHK: Регулятор громкости в windows 7

Очень интересно, раз функция обязана возвращать что-то, тогда почему AHK не ругается на синтаксическую ошибку?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

24

Re: AHK: Регулятор громкости в windows 7

Если Return нет, подразумевается, что функция возвращает пустое значение. Если заглянете в справку, увидите примеры функций без Return.

справка пишет:

a function may optionally return a value to its caller

Если понимаете предыдущий вариант, можете сказать, почему там y умножалось на 65536? Почему не на 65537?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: Регулятор громкости в windows 7

teadrinker
Да, вы правы, но привели не ту цитату из справки. В ней говорится, что функция не всегда возвращает значение. Вот правильная цитата:

Return, Exit, and General Remarks

If the flow of execution within a function reaches the function's closing brace prior to encountering a Return, the function ends and returns a blank value (empty string) to its caller. A blank value is also returned whenever the function explicitly omits Return's parameter.

В ней говорится, что закрывающая скобка может заменять пустой Return. Потому и компилятор не ругается.

почему там y умножалось на 65536? Почему не на 65537?

Потому, что это "2" в какой-то степени, но зачем этот оверинжиниринг.

26

Re: AHK: Регулятор громкости в windows 7

65536 = 10000 в 16-й системе исчисления.
В виндовсе виртуальный монитор размером 10к на 10к пикселей, независимо от реального.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

27

Re: AHK: Регулятор громкости в windows 7

Нет, виртуальный монитор не имеет к этому отношения, используются координаты в пикселях.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

28

Re: AHK: Регулятор громкости в windows 7

Ещё в этой теме выяснилось, как не так?
Вот тут это написано.

Информация указывается в виде абсолютных или относительных целочисленных значений.

Если указано значение MOUSEEVENTF_ABSOLUTE , dx и dy содержат нормализованные абсолютные координаты от 0 до 65 535. Процедура события отображает эти координаты на поверхность дисплея. Координата (0,0) отображается в верхнем левом углу поверхности дисплея, (65535,65535) отображается в правом нижнем углу.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

29

Re: AHK: Регулятор громкости в windows 7

Нет, эта тема не имеет отношения к данному случаю. Если бы координаты были относительными, во-первых и X тоже нужно было бы преобразовывать. Во-вторых, чтобы преобразовать абсолютные в относительные, недостаточно просто умножить абсолютную координату на 65536, как вы можете видеть в той теме:

X := X*65535/A_ScreenWidth
Y := Y*65535/A_ScreenHeight

В данном же случае мы просто сдвигаем Y на 16 бит (или на два байта) влево, так программа и считывает эту координату.
Поэтому правильнее будет выглядеть вариант

x|y << 16
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: Регулятор громкости в windows 7

Тем не менее, не очень удобно как по мне. Нет чтобы в процентном отношении тогда сделать.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

31

Re: AHK: Регулятор громкости в windows 7

И как это должно было бы быть?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

32

Re: AHK: Регулятор громкости в windows 7

Мне не ясна полная картина устройства системы, поэтому я бы наверно использовал отдельные переменные X, Y, а не соединял их в одну.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

33

Re: AHK: Регулятор громкости в windows 7

Такой способ передачи координат для программистов привычен, он часто используется в winapi, например:

DllCall("GetCursorPos", "Int64P", POINT)
MsgBox, % "x: " . POINT & 0xFFFFFFFF . "`n"
        . "y: " . POINT >> 32

Только тут Y сдвигается не на 16 бит, а на 32.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder