1 (изменено: serzh82saratov, 2013-04-29 01:31:00)

Тема: AHK: Управление звуком в windows 7

Как в windows 7 управлять звуком (прибавить-убавить-задать значение-прочитать значение) без помощи Vista Audio Control Function Reference?
SoundSet не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Управление звуком в windows 7

А чем ваc не устраивает VA.ahk?

3 (изменено: serzh82saratov, 2013-04-23 23:21:13)

Re: AHK: Управление звуком в windows 7

VA_SetMasterVolume(VA_GetMasterVolume()+5)

долго думает  при изменении громкости

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Управление звуком в windows 7

Если нужно управлять лишь уровнем «MasterVolume устройства воспроизведения по умолчанию» можно воспользоваться следующим огрызком оригинальной библиотеки:

; получить значение:
MsgBox % SoundVolume.level

; установить значение:
Mbutton::SoundVolume.level := 25, SoundVolume.tooltip

; увеличить или уменьшить значение:
WheelUp::SoundVolume.level += 10, SoundVolume.tooltip
WheelDown::SoundVolume.level -= 10, SoundVolume.tooltip



; Дальше можно не читать.

Class SoundVolumeControl
{
    __Set(key, value) {
        If (key = "level") {
            vol := value > 100 ? 100 : value < 0 ? 0 : value
            aev := this.GetAudioEndpointVolume()
            , DllCall(NumGet(NumGet(aev+0)+7*A_PtrSize), "ptr", aev, "float", vol/100)
            , ObjRelease(aev)
            return this.currentLevel := vol
        }
    }

    __Get(key) {
        If (key = "level") {
            aev := this.GetAudioEndpointVolume()
            , DllCall(NumGet(NumGet(aev+0)+9*A_PtrSize), "ptr", aev, "float*", vol)
            , ObjRelease(aev)
            return this.currentLevel := Round(vol*100)
        }

        Else If (key = "tooltip") {
            CoordMode, ToolTip
            ToolTip, % "Volume: " . this.currentLevel . "%", A_ScreenWidth, 3
            SetTimer, REMOVE_TOOLTIP, -1000
            return ""
        }
    }

    GetAudioEndpointVolume() {
        DllCall("ole32\CoCreateInstance"
            , "ptr", this.GUID(CLSID_MMDeviceEnumerator, "{BCDE0395-E52F-467C-8E3D-C4579291692E}")
            , "ptr", 0
            , "uint", 21
            , "ptr", this.GUID(IID_IMMDeviceEnumerator, "{A95664D2-9614-4F35-A746-DE8DB63617E6}")
            , "ptr*", deviceEnumerator)
        , DllCall(NumGet(NumGet(deviceEnumerator+0)+4*A_PtrSize)
            , "ptr", deviceEnumerator
            , "uint", 0
            , "uint", 0
            , "ptr*", device)
        , ObjRelease(deviceEnumerator)
        , DllCall(NumGet(NumGet(device+0)+3*A_PtrSize)
            , "ptr", device
            , "ptr", this.GUID(iid, "{5CDF2C82-841E-4546-9722-0CF74078229A}")
            , "uint", 7
            , "uint", 0
            , "ptr*", endpointVolume)
        , ObjRelease(device)
        return endpointVolume
    }

    GUID(ByRef guid_out, guid_in) {
        VarSetCapacity(guid_out, 16, 0), DllCall("ole32\CLSIDFromString", "wstr", guid_in, "ptr", &guid_out)
        return &guid_out
    }
}

Class SoundVolume extends SoundVolumeControl
{
    static currentLevel
}

REMOVE_TOOLTIP:
    ToolTip
    return

5 (изменено: serzh82saratov, 2012-07-18 17:10:32)

Re: AHK: Управление звуком в windows 7

creature.ws

SoundVolume.level += 5
; Дальше можно не читать.
Class SoundVolumeControl
{
    __Set(key, value) {
        If (key = "level") {
            vol := value > 100 ? 100 : value < 0 ? 0 : value
            aev := this.GetAudioEndpointVolume()
            , DllCall(NumGet(NumGet(aev+0)+7*A_PtrSize), "ptr", aev, "float", vol/100)
            , ObjRelease(aev)
            return this.currentLevel := vol
        }
    }

    __Get(key) {
        If (key = "level") {
            aev := this.GetAudioEndpointVolume()
            , DllCall(NumGet(NumGet(aev+0)+9*A_PtrSize), "ptr", aev, "float*", vol)
            , ObjRelease(aev)
            return this.currentLevel := Round(vol*100)
        }

        Else If (key = "tooltip") {
            CoordMode, ToolTip
            ToolTip, % "Volume: " . this.currentLevel . "%", A_ScreenWidth, 3

            return ""
        }
    }

    GetAudioEndpointVolume() {
        DllCall("ole32\CoCreateInstance"
            , "ptr", this.GUID(CLSID_MMDeviceEnumerator, "{BCDE0395-E52F-467C-8E3D-C4579291692E}")
            , "ptr", 0
            , "uint", 21
            , "ptr", this.GUID(IID_IMMDeviceEnumerator, "{A95664D2-9614-4F35-A746-DE8DB63617E6}")
            , "ptr*", deviceEnumerator)
        , DllCall(NumGet(NumGet(deviceEnumerator+0)+4*A_PtrSize)
            , "ptr", deviceEnumerator
            , "uint", 0
            , "uint", 0
            , "ptr*", device)
        , ObjRelease(deviceEnumerator)
        , DllCall(NumGet(NumGet(device+0)+3*A_PtrSize)
            , "ptr", device
            , "ptr", this.GUID(iid, "{5CDF2C82-841E-4546-9722-0CF74078229A}")
            , "uint", 7
            , "uint", 0
            , "ptr*", endpointVolume)
        , ObjRelease(device)
        return endpointVolume
    }

    GUID(ByRef guid_out, guid_in) {
        VarSetCapacity(guid_out, 16, 0), DllCall("ole32\CLSIDFromString", "wstr", guid_in, "ptr", &guid_out)
        return &guid_out
    }
}

Class SoundVolume extends SoundVolumeControl
{
    static currentLevel
}
    return

Спасибо это не тормозит!
А ещё можно уменьшить код?

        Else If (key = "tooltip") {
            CoordMode, ToolTip
            ToolTip, % "Volume: " . this.currentLevel . "%", A_ScreenWidth, 3

            return ""

с этим не знаю как быть , мне "tooltip" не надо.
И есть ли возможность функции MUTE, как 0 сделать понятно, а как чтоб предыдущая возвращалась громкость?
Ещё вопрос: как заставить работать с Параметром командной строки

SoundVolume.level += %1%

это не работает

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Управление звуком в windows 7

Не надо tooltip — не используйте. Желаете уменьшить — уменьшайте
Можно сохранять значение громкости до уменьшения до нуля, а можно по аналогии из va.ahk добавить реализацию требуемой функции.

7 (изменено: serzh82saratov, 2012-07-18 17:15:39)

Re: AHK: Управление звуком в windows 7

как заставить работать с Параметром командной строки?

SoundVolume.level += %1%
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Управление звуком в windows 7

Это к теме никак не относится параметры командной строки напрямую в выражениях использовать не получится.

9

Re: AHK: Управление звуком в windows 7

creature.ws
Спасибо за помощь

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: creature.ws, 2012-07-18 22:57:50)

Re: AHK: Управление звуком в windows 7

Добавлено mute

; получить значение:
SoundVolume.level

; установить значение:
Mbutton::SoundVolume.level := 25

; увеличить или уменьшить значение:
WheelUp::SoundVolume.level += 10
WheelDown::SoundVolume.level -= 10

; заглушить:
!MButton::SoundVolume.mute := !SoundVolume.mute

Class SoundVolumeControl
{
    __Set(key, value) {
        aev := this.GetAudioEndpointVolume()

        If (key = "level")
        {
            value := value > 100 ? 100 : value < 0 ? 0 : value
            DllCall(NumGet(NumGet(aev+0)+7*A_PtrSize), "ptr", aev, "float", value/100), ObjRelease(aev)
            return value, this.showToolTip && this.ToolTip("Volume: " . value . "%")
        }

        Else If (key = "mute")
        {
            DllCall(NumGet(NumGet(aev+0)+14*A_PtrSize), "ptr", aev, "int", value? 1:0, "ptr", this.VA_GUID(GuidEventContext)), ObjRelease(aev)
            return value, this.showToolTip && this.ToolTip((value? "M":"Unm") "ute master volume")
        }

        ELse return "", ObjRelease(aev)
    }

    __Get(key) {
        aev := this.GetAudioEndpointVolume()

        If (key = "level")
        {
            DllCall(NumGet(NumGet(aev+0)+9*A_PtrSize), "ptr", aev, "float*", vol), ObjRelease(aev)
            return this.savedLevel := Round(vol*100), this.showToolTip && this.ToolTip("Volume: " . this.savedLevel . "%")
        }

        Else If (key = "mute")
        {
            DllCall(NumGet(NumGet(aev+0)+15*A_PtrSize), "ptr", aev, "int*", muteState), ObjRelease(aev)
            return muteState
        }

        ELse return "", ObjRelease(aev)
    }

    ToolTip(text) {
        CoordMode, ToolTip
        ToolTip, %text%, A_ScreenWidth, 3
        SetTimer, REMOVE_TOOLTIP, -1000
    }

    GetAudioEndpointVolume() {
        DllCall("ole32\CoCreateInstance"
            , "ptr", this.GUID(CLSID_MMDeviceEnumerator, "{BCDE0395-E52F-467C-8E3D-C4579291692E}")
            , "ptr", 0
            , "uint", 21
            , "ptr", this.GUID(IID_IMMDeviceEnumerator, "{A95664D2-9614-4F35-A746-DE8DB63617E6}")
            , "ptr*", deviceEnumerator)
        , DllCall(NumGet(NumGet(deviceEnumerator+0)+4*A_PtrSize)
            , "ptr", deviceEnumerator
            , "uint", 0
            , "uint", 0
            , "ptr*", device)
        , ObjRelease(deviceEnumerator)
        , DllCall(NumGet(NumGet(device+0)+3*A_PtrSize)
            , "ptr", device
            , "ptr", this.GUID(iid, "{5CDF2C82-841E-4546-9722-0CF74078229A}")
            , "uint", 7
            , "uint", 0
            , "ptr*", endpointVolume)
        , ObjRelease(device)
        return endpointVolume
    }

    GUID(ByRef guid_out, guid_in) {
        VarSetCapacity(guid_out, 16, 0), DllCall("ole32\CLSIDFromString", "wstr", guid_in, "ptr", &guid_out)
        return &guid_out
    }
}

Class SoundVolume extends SoundVolumeControl
{
    static savedLevel
    static showToolTip := True
}

REMOVE_TOOLTIP:
    ToolTip
    return

11

Re: AHK: Управление звуком в windows 7

NumpadAdd::PostMessage, 0x319,, 10<<16,, ahk_class Progman ; increase
NumpadSub::PostMessage, 0x319,,  9<<16,, ahk_class Progman ; decrease
NumpadMult::PostMessage, 0x319,,  8<<16,, ahk_class Progman ; mute

^NumpadAdd::PostMessage, 0x319,, 26<<16,, ahk_class Progman ; mic_increase
^NumpadSub::PostMessage, 0x319,, 25<<16,, ahk_class Progman ; mic_decrease
^NumpadMult::PostMessage, 0x319,, 24<<16,, ahk_class Progman ; mic_mute

/*
WM_APPCOMMAND                  = $0319;

APPCMD_FIRST = $8000;
APPCOMMAND_BROWSER_BACKWARD       = APPCMD_FIRST +1
APPCOMMAND_BROWSER_FORWARD        = APPCMD_FIRST +2
APPCOMMAND_BROWSER_REFRESH        = APPCMD_FIRST +3
APPCOMMAND_BROWSER_STOP           = APPCMD_FIRST +4
APPCOMMAND_BROWSER_SEARCH         = APPCMD_FIRST +5
APPCOMMAND_BROWSER_FAVORITES      = APPCMD_FIRST +6
APPCOMMAND_BROWSER_HOME           = APPCMD_FIRST +7
APPCOMMAND_VOLUME_MUTE            = APPCMD_FIRST +8
APPCOMMAND_VOLUME_DOWN            = APPCMD_FIRST +9
APPCOMMAND_VOLUME_UP              = APPCMD_FIRST +10
APPCOMMAND_MEDIA_NEXTTRACK        = APPCMD_FIRST +11
APPCOMMAND_MEDIA_PREVIOUSTRACK    = APPCMD_FIRST +12
APPCOMMAND_MEDIA_STOP             = APPCMD_FIRST +13
APPCOMMAND_MEDIA_PLAY_PAUSE       = APPCMD_FIRST +14
APPCOMMAND_LAUNCH_MAIL            = APPCMD_FIRST +15
APPCOMMAND_LAUNCH_MEDIA_SELECT    = APPCMD_FIRST +16
APPCOMMAND_LAUNCH_APP1            = APPCMD_FIRST +17
APPCOMMAND_LAUNCH_APP2            = APPCMD_FIRST +18
APPCOMMAND_BASS_DOWN              = APPCMD_FIRST +19
APPCOMMAND_BASS_BOOST             = APPCMD_FIRST +20
APPCOMMAND_BASS_UP                = APPCMD_FIRST +21
APPCOMMAND_TREBLE_DOWN            = APPCMD_FIRST +22
APPCOMMAND_TREBLE_UP              = APPCMD_FIRST +23
APPCOMMAND_MICROPHONE_VOLUME_MUTE = APPCMD_FIRST +24
APPCOMMAND_MICROPHONE_VOLUME_DOWN = APPCMD_FIRST +25
APPCOMMAND_MICROPHONE_VOLUME_UP   = APPCMD_FIRST +26
APPCOMMAND_HELP                   = APPCMD_FIRST +27
APPCOMMAND_FIND                   = APPCMD_FIRST +28
APPCOMMAND_NEW                    = APPCMD_FIRST +29
APPCOMMAND_OPEN                   = APPCMD_FIRST +30
APPCOMMAND_CLOSE                  = APPCMD_FIRST +31
APPCOMMAND_SAVE                   = APPCMD_FIRST +32
APPCOMMAND_PRINT                  = APPCMD_FIRST +33
APPCOMMAND_UNDO                   = APPCMD_FIRST +34
APPCOMMAND_REDO                   = APPCMD_FIRST +35
APPCOMMAND_COPY                   = APPCMD_FIRST +36
APPCOMMAND_CUT                    = APPCMD_FIRST +37
APPCOMMAND_PASTE                  = APPCMD_FIRST +38
APPCOMMAND_REPLY_TO_MAIL          = APPCMD_FIRST +39
APPCOMMAND_FORWARD_MAIL           = APPCMD_FIRST +40
APPCOMMAND_SEND_MAIL              = APPCMD_FIRST +41
APPCOMMAND_SPELL_CHECK            = APPCMD_FIRST +42
APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE    = APPCMD_FIRST +43
APPCOMMAND_MIC_ON_OFF_TOGGLE      = APPCMD_FIRST +44
APPCOMMAND_CORRECTION_LIST        = APPCMD_FIRST +45
APPCOMMAND_MEDIA_PLAY             = APPCMD_FIRST +46
APPCOMMAND_MEDIA_PAUSE            = APPCMD_FIRST +47
APPCOMMAND_MEDIA_RECORD           = APPCMD_FIRST +48
APPCOMMAND_MEDIA_FAST_FORWARD     = APPCMD_FIRST +49
APPCOMMAND_MEDIA_REWIND           = APPCMD_FIRST +50
APPCOMMAND_MEDIA_CHANNEL_UP       = APPCMD_FIRST +51
APPCOMMAND_MEDIA_CHANNEL_DOWN     = APPCMD_FIRST +52
*/

12 (изменено: creature.ws, 2012-07-18 20:25:14)

Re: AHK: Управление звуком в windows 7

А определить положение ползунка громкости подобным способом возможно?

13

Re: AHK: Управление звуком в windows 7

Grey
PostMessage, 0x319,,  8<<16,, ahk_class Progman ; mute
Про муть это вы хорошо напомнили, я этот способ сразу пробовал и забыл, собственно и просто Send {Volume_Mute} робит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Управление звуком в windows 7

Товарищи, будьте добры помочь мне:
Под XP был скрпит:

Loop 
 { 
 IfWinExist, Калькулятор Плюс 
 { 
     SoundSet, 1,, Mute 
 } 
 else 
 { 
 SoundSet, 0,, Mute 
 } 
 Sleep 500 
 }

Но эта зараза в семерке более не рабоатет. Помогите плиз, как заставить работать в семерке. Функции увеличения/уменьшения не нужны. Нужно просто тупо включать/выключать звук при отсутствии/наличии определенного окна соотвественно. Желательно чтоб не было ничего лишнего.

15

Re: AHK: Управление звуком в windows 7

Real Root пишет:

Товарищи, будьте добры помочь мне:
Под XP был скрпит:
Но эта зараза в семерке более не рабоатет. Помогите плиз, как заставить работать в семерке. Функции увеличения/уменьшения не нужны. Нужно просто тупо включать/выключать звук при отсутствии/наличии определенного окна соотвественно. Желательно чтоб не было ничего лишнего.

VA_SetMasterMute(false, 1)
VA_SetMasterMute(True, 1)

Vista Audio Control Function Reference
http://www.autohotkey.com/community/vie … hp?t=23792

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Управление звуком в windows 7

Send {Volume_Mute}
PostMessage, 0x319,,  8<<16,, ahk_class Progman ; mute

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17 (изменено: Real Root, 2012-07-19 10:45:17)

Re: AHK: Управление звуком в windows 7

serzh82saratovх
Большое спасибо за ссылки. Появилась надежда
Подскажите пожалуйста, как добавить Vista Audio Control Function Reference к AutoHotKey? Скопировать код в мой AHK скрипт? Или есть папка типа библиотке куда нужно ложить дополнительные AHK-файлы. там просто помимо ista Audio Control Function Reference нужно к ней самой COM Standard Library а к той еще и : ComCall via DllCall. Масло масленное короче.

18

Re: AHK: Управление звуком в windows 7

Создайте в корневой директории программы папку Lib, и положите туда.

19 (изменено: Real Root, 2012-07-19 18:23:10)

Re: AHK: Управление звуком в windows 7

Всем спасибо! Вопрос решен!

20 (изменено: creature.ws, 2012-07-19 18:25:00)

Re: AHK: Управление звуком в windows 7

В соответствующей теме офф форума написано:

Notes for v2.1:

    Requires AutoHotkey_L (any recent build should work).
    COM.ahk is NOT required. COM_Init() does NOT need to be called.

Notes for v2.0:

    Requires Sean's Standard Library COM.ahk
    COM must be initialized prior to calling any VA functions: COM_Init().

Если используете AHK_L, COM.ahk никуда складывать не нужно, VA.ahk должна быть версии 2.1

21

Re: AHK: Управление звуком в windows 7

Да, все, вопрос решился. Я пока исправлял свое сообщение, вы уже успели написать. Просто в системе было установлено 2 Autohotkey - один х86, второй х64. Через 86 не работало.
Спасибо!

22

Re: AHK: Управление звуком в windows 7

Не просто «x86», а AHK-Basic версии 1.0.48.05 или меньше. Это в ней отсутствует ObjRelease()

23

Re: AHK: Управление звуком в windows 7

Позвольте поинтересоваться. А вообще насколько трудно вытащить тело скрипта из упакованного exe файла. Я просто до сегодняшнего дня в основном все на VBS делал и использовал Stunnix VBS Obfuscator для сокрытия кода. Честно говоря разработака скриптиов на VBS на 2 порядка сложнее написания подобного на AutoHotkey - я вообще в восторге от данной тулзы. Вот последнее что меня сейчас волнует, так это не смогут ли прочесть мои скрипты?

24

Re: AHK: Управление звуком в windows 7

OFF:

Real Root пишет:

Честно говоря разработака скриптиов на VBS на 2 порядка сложнее написания подобного на AutoHotkey…

Кому как .

25 (изменено: serzh82saratov, 2012-07-19 19:42:21)

Re: AHK: Управление звуком в windows 7

Real Root пишет:

Позвольте поинтересоваться. А вообще насколько трудно вытащить тело скрипта из упакованного exe файла. Я просто до сегодняшнего дня в основном все на VBS делал и использовал Stunnix VBS Obfuscator для сокрытия кода. Честно говоря разработака скриптиов на VBS на 2 порядка сложнее написания подобного на AutoHotkey - я вообще в восторге от данной тулзы. Вот последнее что меня сейчас волнует, так это не смогут ли прочесть мои скрипты?

:):) только сегодня тему создал http://forum.script-coding.com/viewtopi … 781#p61781

Но можно как-то ставить код на скрипт где-то в справке давно видел.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26

Re: AHK: Управление звуком в windows 7

Подскажите пожалуйста скрипт чтобы при зажатии комбинации клавиш или одной, звук уменьшался на 50% а при отжатии возвращался на 100%, это для удобства разговора по скайпу и подобным программам.

27

Re: AHK: Управление звуком в windows 7

~Capslock::
    SoundVolume.level := SoundVolume.level//2
    KeyWait, Capslock
    SoundVolume.level := SoundVolume.level*2
    return

Class SoundVolumeControl
{
    __Set(key, value) {
        aev := this.GetAudioEndpointVolume()

        If (key = "level")
        {
            value := value > 100 ? 100 : value < 0 ? 0 : value
            DllCall(NumGet(NumGet(aev+0)+7*A_PtrSize), "ptr", aev, "float", value/100), ObjRelease(aev)
            return value, this.showToolTip && this.ToolTip("Volume: " . value . "%")
        }

        Else If (key = "mute")
        {
            DllCall(NumGet(NumGet(aev+0)+14*A_PtrSize), "ptr", aev, "int", value? 1:0, "ptr", this.VA_GUID(GuidEventContext)), ObjRelease(aev)
            return value, this.showToolTip && this.ToolTip((value? "M":"Unm") "ute master volume")
        }

        ELse return "", ObjRelease(aev)
    }

    __Get(key) {
        aev := this.GetAudioEndpointVolume()

        If (key = "level")
        {
            DllCall(NumGet(NumGet(aev+0)+9*A_PtrSize), "ptr", aev, "float*", vol), ObjRelease(aev)
            return this.savedLevel := Round(vol*100), this.showToolTip && this.ToolTip("Volume: " . this.savedLevel . "%")
        }

        Else If (key = "mute")
        {
            DllCall(NumGet(NumGet(aev+0)+15*A_PtrSize), "ptr", aev, "int*", muteState), ObjRelease(aev)
            return muteState
        }

        ELse return "", ObjRelease(aev)
    }

    ToolTip(text) {
        CoordMode, ToolTip
        ToolTip, %text%, A_ScreenWidth, 3
        SetTimer, REMOVE_TOOLTIP, -1000
    }

    GetAudioEndpointVolume() {
        DllCall("ole32\CoCreateInstance"
            , "ptr", this.GUID(CLSID_MMDeviceEnumerator, "{BCDE0395-E52F-467C-8E3D-C4579291692E}")
            , "ptr", 0
            , "uint", 21
            , "ptr", this.GUID(IID_IMMDeviceEnumerator, "{A95664D2-9614-4F35-A746-DE8DB63617E6}")
            , "ptr*", deviceEnumerator)
        , DllCall(NumGet(NumGet(deviceEnumerator+0)+4*A_PtrSize)
            , "ptr", deviceEnumerator
            , "uint", 0
            , "uint", 0
            , "ptr*", device)
        , ObjRelease(deviceEnumerator)
        , DllCall(NumGet(NumGet(device+0)+3*A_PtrSize)
            , "ptr", device
            , "ptr", this.GUID(iid, "{5CDF2C82-841E-4546-9722-0CF74078229A}")
            , "uint", 7
            , "uint", 0
            , "ptr*", endpointVolume)
        , ObjRelease(device)
        return endpointVolume
    }

    GUID(ByRef guid_out, guid_in) {
        VarSetCapacity(guid_out, 16, 0), DllCall("ole32\CLSIDFromString", "wstr", guid_in, "ptr", &guid_out)
        return &guid_out
    }
}

Class SoundVolume extends SoundVolumeControl
{
    static savedLevel
    static showToolTip := true ; изменить true на false для отключения Toolltip
}

REMOVE_TOOLTIP:
    ToolTip
    return

Если имелись в виду проценты максимальной громкости — измените деление и умножение на присваивание абсолютных значений

28 (изменено: 1st, 2012-07-24 15:50:02)

Re: AHK: Управление звуком в windows 7

Спасибо! Но вот что получилось:

http://i080.radikal.ru/1207/d9/423390f25e79.jpg

скопировал не чего не меняя. не обязательно проценты, это я написал чтобы смысл был понятен.

29 (изменено: 1st, 2012-07-24 19:11:34)

Re: AHK: Управление звуком в windows 7

#q::
    SoundSet, 50, Master
    KeyWait, q
    SoundSet, 100, Master
    return

Почему AHK изменяет звук у самого себя, а не у системы?

30 (изменено: serzh82saratov, 2012-07-24 19:23:25)

Re: AHK: Управление звуком в windows 7

SoundSet? странно что вообще не ругается.

Vista Audio Control Function Reference попроще

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

31

Re: AHK: Управление звуком в windows 7

Я плохо разбираюсь но смотрю справку и читаю, так почему в "SoundSet, NewSetting [, ComponentType, ControlType, DeviceNumber]" - значение ComponentType не читается, или я что-то неправильно понял?

32 (изменено: serzh82saratov, 2012-07-24 20:08:22)

Re: AHK: Управление звуком в windows 7

В семёрке не робит, только ХР
Честно говоря сам громкость меняю через http://vdasus.com/2010/03/30/a-znaete-l … oe-nircmd/
както по шустрее
Run, C:\Windows\nircmd.exe setsysvolume 32767
Run, C:\Windows\nircmd.exe setsysvolume 65535

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33 (изменено: 1st, 2012-07-24 19:51:56)

Re: AHK: Управление звуком в windows 7

а SoundVolume.level почему не работает?
Мне надо на кнопку, чтобы я включал микрофон и звук в колонках уменьшался.

34

Re: AHK: Управление звуком в windows 7

«SoundVolume.level» будет работать в ahk_l

35

Re: AHK: Управление звуком в windows 7

Спасибо Большое!

36 (изменено: 1st, 2012-07-25 04:24:10)

Re: AHK: Управление звуком в windows 7

А возможно сделать тоже самое, но с уровнем усилением микрофона? Дело в том что у меня глючит звуковуха и после перезагрузки или просто иногда при работе компа, выключается "усиление микрофона", но немного непонятно потому что когда открываешь свойства микрофона во вкладке "уровни" усиление ползунок стоит всегда на +20, но усиление не работает, а чтобы заработало я двигаю ползунок на +30 и обратно на +20 и тогда оно включается снова, вот эту функцию мне бы хотелось перенести на горячею клавишу.

37 (изменено: serzh82saratov, 2012-07-25 04:28:53)

Re: AHK: Управление звуком в windows 7

вроде в Vista Audio Control Function Reference есть такое
http://www.autohotkey.net/~Lexikos/VA/V … sterVolume
Правда покурить их сейчас не получится  The requested URL was not found on this server.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

38

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

вроде в Vista Audio Control Function Reference есть такое
http://www.autohotkey.net/~Lexikos/VA/V … sterVolume
Правда покурить их сейчас не получится  The requested URL was not found on this server.

Я пробовал почитать что это но так и не понял (туго с англ), и там нечего не скачать. Мне проще если это будет скрипт.

39 (изменено: serzh82saratov, 2012-07-25 05:05:51)

Re: AHK: Управление звуком в windows 7

ТОГДА ДЛЯ ВАС ПРОЩЕ

nircmd

хотя что там трудного ложишь C:\Program Files\AutoHotkey\Lib\VA.ahk

скинуть на почту могу

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

40

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

ТОГДА ДЛЯ ВАС ПРОЩЕ

nircmd

Нет не будет, я не имею понятия что это.

41 (изменено: serzh82saratov, 2012-07-25 05:12:56)

Re: AHK: Управление звуком в windows 7

Давайте почту

 ~Capslock::
a := VA_GetMasterVolume(1) 
b := (a/2)
VA_SetMasterVolume(b, , 1)
KeyWait, Capslock
VA_SetMasterVolume(a, , 1)
return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

42

Re: AHK: Управление звуком в windows 7

отправил

43 (изменено: 1st, 2012-07-25 16:27:12)

Re: AHK: Управление звуком в windows 7

Насколько я понял в Vista Audio Control Function Reference нет усиление микрофона, я нашел вот это Automatic microphone boost, но я нечего там не понял, может кто нибудь помочь?)

44 (изменено: serzh82saratov, 2012-07-25 18:18:03)

Re: AHK: Управление звуком в windows 7

nircmd, это первая ссылка в гугле http://www.nirsoft.net/utils/nircmd.html чтобы скачать нужно покрутить колесико мыши когда будет конец страницы, будут ссылки внизу для скачивания "Download NirCmd" в архиве будет nircmd.exe на нём нажать 2 раза левой кнопкой мыши , нажать copy to windows , нажать ок, NirCmd.chm это справка
В справке nircmd нажать ктрл F набрать  setvolume  покурить ниже, я тоже инглиш не шпрехаю совсем, но там уж очень просто.
у меня уровня усиления нет просто вкл \ выкл , есть уровень записи или не знаю как его назвать, меняет это
Run, C:\Windows\nircmd.exe setsysvolume 25000 default_record
25000 из 65535 чтоб с расчётом не парится тоже самое

 a:=655.35*50  ; 50 - нужный процент
Run nircmd.exe setsysvolume %a% default_record

посмотреть устройства если нужно, хотя у меня на русском всё выдал, врядли это можно использовать, хотя не проверял
Run, C:\Windows\nircmd.exe showsounddevices wait 1000
setsysvolume устанавливает значение в..
changesysvolume меняет значение на...
mutesysvolume
Даже для отдельных приложений есть команды setappvolume changeappvolume

посмотреть устройства если нужно, хотя у меня на русском всё выдал, врядли это можно использовать, хотя не проверял

попробовал, можно с кавычками и без
Забыл что можно без C:\Windows\ , и чтоб колёсико немелькало
Run, %comspec% /c nircmd.exe changesysvolume 555 Динамики, , hide

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

45 (изменено: serzh82saratov, 2012-07-26 11:49:13)

Re: AHK: Управление звуком в windows 7

Насколько я понял в Vista Audio Control Function Reference нет усиление микрофона, я нашел вот это Automatic microphone boost, но я нечего там не понял, может кто нибудь помочь?)

VA_SetMasterVolume(50, Микрофон, 2)

справка оффлайн http://files.mail.ru/BDZK9R

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

46

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

Насколько я понял в Vista Audio Control Function Reference нет усиление микрофона, я нашел вот это Automatic microphone boost, но я нечего там не понял, может кто нибудь помочь?)

VA_SetMasterVolume(50, Микрофон, 2)

справка оффлайн http://files.mail.ru/BDZK9R

Мне нужно именно усиление микрофона, а не чувствительность.

47

Re: AHK: Управление звуком в windows 7

Может проще тогда скрипт на перезагрузку звуковой карты, если весь смысл усиление микрофона чтою убрать глюк.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

48 (изменено: 1st, 2012-07-26 23:38:23)

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

Может проще тогда скрипт на перезагрузку звуковой карты, если весь смысл усиление микрофона чтою убрать глюк.

Глюк убирается только путем изменения уровня усиленя микрофона, и сам глюк появляется при каждой загрузке компа или простое. Похоже на кривые дрова, но они с офф сайта, а там так и не пофиксили, т.е. при загрузке усиление микрофона читается с дров, а его уровень нет. (или как это происходит я не знаю, но по моей догадке так)

49

Re: AHK: Управление звуком в windows 7

@1st Запустите скрипт для анализа звуковой карты, и выложите картинку окна с результатом.

50

Re: AHK: Управление звуком в windows 7

Grey пишет:

@1st Запустите скрипт для анализа звуковой карты, и выложите картинку окна с результатом.

http://s015.radikal.ru/i332/1207/4f/ffb6d6e9eb19.jpg

51 (изменено: serzh82saratov, 2012-07-27 16:05:54)

Re: AHK: Управление звуком в windows 7

1st
Какая звуковая карта?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

52

Re: AHK: Управление звуком в windows 7

У меня дело с усилением обстоит по другому:
http://img193.imageshack.us/img193/8071/sndtest.jpg
Control Type не Mute, а OnOff. В свойствах самого микрофона это чекбокс а не слайдер:
http://img99.imageshack.us/img99/181/micbprop.jpg
И вот такой код на него воздействует (правда бывает скрипт виснет после нескольких нажатий):

Space::
   SoundGet, IsState, Microphone, OnOff
   SoundSet, % IsState="On" ? 0:1, Microphone, OnOff
   TrayTip,, % "boost: is "(IsState="Off" ? "en":"dis")"able"
   KeyWait, % A_ThisHotkey
   Return

Если выставить режим совместимости в свойствах самого интерпретатора:
http://img515.imageshack.us/img515/1659/ahkcomp.jpg
То код на анализ, выдаёт несколько другие результаты.

53 (изменено: 1st, 2012-07-27 20:11:17)

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

1st
Какая звуковая карта?

Встроенная Asus P7P55D Deluxe
http://s018.radikal.ru/i520/1207/c4/b824d8c809f3.jpg

54 (изменено: serzh82saratov, 2012-07-29 16:32:19)

Re: AHK: Управление звуком в windows 7

видимо проще сделать скрипт - запустил окно где нибудь подальше х5555 у5555, чтоб не мелькало-подёргал ползунок-закрыл
у меня так на ASUS Xonar DG Audio  для переключения с ушей на колонки с переменой уровней громкости в микшере, по другому никак.
чтоб дёргать без мыши тем более в окне за пределами раб стола юзай
нажать
ControlClick, x115 y174, Xonar DG Audio Center,,,, Pos
дёргать
ControlClick, d x115 y174, Xonar DG Audio Center,,,, Pos
ControlClick, u x115 y134, Xonar DG Audio Center,,,, Pos

кстати стоит в авто загрузке, так как при старте включены всегда  наушники

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

55

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

видимо проще сделать скрипт - запустил окно где нибудь подальше х5555 у5555, чтоб не мелькало-подёргал ползунок-закрыл
у меня так на ASUS Xonar DG Audio  для переключения с ушей на колонки с переменой уровней громкости в микшере, по другому никак.
чтоб дёргать без мыши тем более в окне за пределами раб стола юзай
нажать
ControlClick, x115 y174, Xonar DG Audio Center,,,, Pos
дёргать
ControlClick, x115 y174, Xonar DG Audio Center,,,, D Pos
ControlClick, x115 y134, Xonar DG Audio Center,,,, U Pos

кстати стоит в авто загрузке, так как при старте включены всегда  наушники

Извини я не чего не понял.

56

Re: AHK: Управление звуком в windows 7

Видимо я не понял, тебе важно свою траблу решить, или необходимо решить её только через API ?
скрипт пускает окно где усиление, дергаёт туда сюда ползунок что снимает твой вопрос, закрывает окно.

А возможно сделать тоже самое, но с уровнем усилением микрофона? Дело в том что у меня глючит звуковуха и после перезагрузки или просто иногда при работе компа, выключается "усиление микрофона", но немного непонятно потому что когда открываешь свойства микрофона во вкладке "уровни" усиление ползунок стоит всегда на +20, но усиление не работает, а чтобы заработало я двигаю ползунок на +30 и обратно на +20 и тогда оно включается снова, вот эту функцию мне бы хотелось перенести на горячею клавишу.

Gosub, что я не понял

if нужно чтоб это было так, что ничего не видно и не активируется
break
else
if тебе это нужно, но ты не понял из моего текста того как это сделать
break
if тебе нужно не это, а нужно то, чего я не понял
ExitApp

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

57 (изменено: serzh82saratov, 2012-07-28 23:17:55)

Re: AHK: Управление звуком в windows 7

Хотя я думаю что ребут её поможет, ты пробовал?

У тебя нет сейчас варианта, через встроенные переменные определения\воздействия, влиять на нужный параметр твоей ЗК.
Почему не сделать просто макрос?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

58

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

if тебе это нужно, но ты не понял из моего текста того как это сделать

Это )

59 (изменено: serzh82saratov, 2012-07-29 16:33:19)

Re: AHK: Управление звуком в windows 7

Я не знаю CLSID Управление звуковыми устройствами потому создаёш папку

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

из неё создаёш ярлык на Управление звуковыми устройствами указываеш его запуск, дальше сам поймёш. Естественно координаты свои ставь. AU3_SPY.exe я думаю знаешь что такое.

f1::
Run D:\AutoIt\Управление звуковыми устройствами - Ярлык.lnk
WinWait Звук
WinMove 0, 0       ; перемещаешь окно, можно и запределы эрана
ControlClick, x163 y62, Звук,,,, Pos       ; жмёшь запись
Sleep, 100
ControlClick, x133 y147, Звук,,,, Pos       ; выделяешь свой микрофон
ControlClick, x400 y509, Звук,,,, Pos       ; жмёшь свойства
Sleep, 100
ControlClick, x184 y57, Свойства: Микрофон,,,, Pos       ; жмёшь усиление
Sleep, 100
ControlClick, x150 y133, Свойства: Микрофон,,,, Pos       ; жмёшь слева от ползунка
Sleep, 100
ControlClick, x220 y133, Свойства: Микрофон,,,, Pos       ; жмёшь справа от ползунка, т.е. возвращаешь обратно
Sleep, 100
ControlClick, ОК, Свойства: Микрофон      ; жмёшь ОК
WinClose Звук
Return

---
Кстати знающие люди подскажите как узнавать CLSID окон, ну типа

Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; Открывает Корзину
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

60

Re: AHK: Управление звуком в windows 7

CLSID List.

61 (изменено: serzh82saratov, 2012-07-30 00:15:27)

Re: AHK: Управление звуком в windows 7

Grey пишет:

CLSID List.

Спасибо, думал что такое есть для всех окон винды

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

62

Re: AHK: Управление звуком в windows 7

Макрос кликанья я могу сделать, я думал можно сделать это скриптом, но если нет, тогда я не понял одного как мне открыть командой в скрипте окно "Свойства: Line In/Mic In", желательно с активной вкладкой "Уровни", все что я нашел это такая команда

control mmsys.cpl,,1

только для windows 7, но это окно "звук" с вкладкой "запись".

63 (изменено: serzh82saratov, 2012-07-30 04:33:00)

Re: AHK: Управление звуком в windows 7

control mmsys.cpl,,1 - это находка!

я думал можно сделать это скриптом

разве это не скрипт?

но если нет, тогда я не понял одного как мне открыть командой в скрипте окно "Свойства: Line In/Mic In", желательно с активной вкладкой "Уровни

Кликать куда надо занимает не дольше 400 мс. Не понимаю в чем проблема. Видимо всё таки

или необходимо решить её только через API ?

control mmsys.cpl,,1

странно, у меня это открывает вкладку "Воспроизведение"

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

64 (изменено: 1st, 2012-07-30 05:01:48)

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

control mmsys.cpl,,1

странно, у меня это открывает вкладку "Воспроизведение"

http://www.saule-spb.ru/library/cpl-applets.html

65

Re: AHK: Управление звуком в windows 7

только для windows 7, но это окно "звук" с вкладкой "запись".

Я просто подумал что имелось ввиду сразу открывается вкладку запись
Ссылка хорошая, спасибо.
_____

И всё же, чего нужно добится?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

66

Re: AHK: Управление звуком в windows 7

serzh82saratov пишет:

только для windows 7, но это окно "звук" с вкладкой "запись".

Я просто подумал что имелось ввиду сразу открывается вкладку запись
Ссылка хорошая, спасибо.

Так и есть.
_____

И всё же, чего нужно добится?

Как открыть через AHK окно "Свойства: Line In/Mic In" (Свойства Микрофона) в windows 7

67 (изменено: serzh82saratov, 2012-07-30 16:41:32)

Re: AHK: Управление звуком в windows 7

Как открыть через AHK окно "Свойства: Line In/Mic In" (Свойства Микрофона) в windows 7

Я думаю, но могу конечно заблуждатся, что никак. Окно "звук" встроено в винду, а вот  твоё окно Line In/Mic In зависимо, т.е. если нет в системе Line In/Mic In, а есть к примеру Лин. вход как у меня, или Line In/Mic In отключен, то окна Line In/Mic In несуществует. Поэтому только щёлкать по вкладкам.
у меня это регулирует

VA_SetMasterVolume(50, , "Лин. вход")

попробуй просто

VA_SetMasterVolume(50, "Усиление микрофона", "Mic In")
VA_SetMasterVolume(50, , "Усиление микрофона")

открой окно "Свойства: Line In/Mic In" и эксперементируй

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

68

Re: AHK: Управление звуком в windows 7

может кто то еще подскажет

69

Re: AHK: Управление звуком в windows 7

; отладка

SetKeyDelay, 250

Space::
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,recording",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      Send, {Down}
      Sleep, 500
      ControlClick, Button3, ahk_class #32770,,, 2
      Sleep, 500
      Send, {CtrlDown}{Tab 2}{CtrlUp}
      Sleep, 500
      ControlSend, msctls_trackbar322
                 , {Left}{Right}
                 , ahk_class #32770
      Sleep, 500
      Process, Close, % PID
      KeyWait, % A_ThisHotkey
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   KeyWait, % A_ThisHotkey
   Return
; итоговый

SetKeyDelay, 25

Space::
   Run, % "rundll32.exe Shell32.dll,"
      . "Control_RunDLL mmsys.cpl,,recording",,, PID
   WinWait, % "ahk_pid" PID,, 1
   If !ErrorLevel
   {
      Send, {Down}
      ControlClick, Button3, ahk_class #32770,,, 2
      Send, {CtrlDown}{Tab 2}{CtrlUp}
      ControlSend, msctls_trackbar322
                 , {Left}{Right}
                 , ahk_class #32770
      Process, Close, % PID
      KeyWait, % A_ThisHotkey
      Return
   }
   MsgBox, 262192, % " ", % "Epic fail", 1
   KeyWait, % A_ThisHotkey
   Return

70

Re: AHK: Управление звуком в windows 7

Спасибо огромное!

71

Re: AHK: Управление звуком в windows 7

Grey пишет:

Process, Close, % PID

А изменения сохраняются? Надо наверно чтобы ОК нажимался.

72

Re: AHK: Управление звуком в windows 7

По Вашему я делаю, что-либо необдуманно?, там и изменения сохраняются, и окна на Escape закрываются...

73

Re: AHK: Управление звуком в windows 7

Grey пишет:

По Вашему я делаю, что-либо необдуманно?, там и изменения сохраняются, и окна на Escape закрываются...

Извините, я спросил чтобы знать.

74 (изменено: serzh82saratov, 2013-04-29 04:59:25)

Re: AHK: Управление звуком в windows 7

Регулировка баланса громкости в микшере для отдельных приложений
(Функция VA_AppVolume)


+ Пример использования, для регулировки баланса громкости активного окна


Step := 10 
CapsLock & WheelDown:: AppVolume("Vol", -Step)
CapsLock & WheelUp:: AppVolume("Vol", +Step)
CapsLock & MButton:: AppVolume("Mute", 2)  

AppVolume(Key, Val) {
    WinGet, Pid, PID, A
    WinGet, Title, ProcessName, ahk_pid %Pid%
    if Title = explorer.exe
        Pid := 0 , Title := "Системные звуки" 
    Res := VA_AppVolume(Key, Val, Pid)
    if Res =
        Res := "Отсутствует в микшере громкости", Key := ""
    Res := (Key = "Mute") ? (Res = 0 ? "Mute OFF": "Mute ON") : Res
    TrayTip, % Title, % Res, 1, 1
}
+ Пример включения\отключения остальных звуков, кроме активного окна


Launch_Mail:: ExclusiveAppVolume()

ExclusiveAppVolume() {
    Static T, PrPid
    WinGet, Pid, PID, A
    WinGet, ProcessName, ProcessName, ahk_pid %Pid%
    ProcessName := RTrim( ProcessName, "\.exe")
    StringUpper, ProcessName, ProcessName
    if ProcessName = explorer 
        Pid := 0 , ProcessName := "Системные звуки" 
    ListPid := 0 "|" VA_AppVolume("ListPid")
    ListPid := RTrim( RegExReplace( ListPid, "S)(^|\|)" Pid "($|\|)", "$1", Count, 1), "|") 
    If !Count
        Return
    T := PrPid = Pid ? !T : 1
    PrPid := Pid
    Loop, parse, ListPid, | 
        VA_AppVolume("Mute", T, A_LoopField) 
    VA_AppVolume("Mute", 0, Pid)    
    TrayTip, Exclusive app sound , % "`n" (T ? "Только """ ProcessName """" : "Все звуки включены") , 1, % T ? 3 : 2
}

------------------------------

+ Функция VA_AppVolume:


    ;   Requirements:
    ;   VA 2.1 - http://www.autohotkey.com/forum/topic23792.html
    ;   https://dl.dropbox.com/u/20532918/Lib/VA-2.2.zip    DownLoad - VA-2.2.zip
    ;   Windows 7
    ;   AutoHotkey_L
    ;
    ;   Currently not included in VA.ahk
    ;
    ;   Post Lexikos - http://www.autohotkey.com/board/topic/78224-possible-to-monitor-and-pseudo-lock-per-app-volume/#entry497079
    ;
    ;   VA_AppVolume

VA_AppVolume(Key, Val = "", Pid = "!")
{
    dev := VA_GetDevice()
    if !dev
        Return
    if VA_IMMDevice_Activate(dev, "{77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F}", 7, 0, mgr) != 0 ; IID_IAudioSessionManager2
        Return ObjRelease(dev)
    ObjRelease(dev)
    if VA_IAudioSessionManager2_GetSessionEnumerator(mgr, enm) != 0
        Return ObjRelease(mgr)
    ObjRelease(mgr)
    VA_IAudioSessionEnumerator_GetCount(enm, count)
    Loop % count
    {
        VA_IAudioSessionEnumerator_GetSession(enm, A_Index-1, ssn)
        VA_IAudioSessionControl2_GetProcessId(ssn, curpid)
        if (Pid = curpid)
        {
            sav := ComObjQuery(ssn, "{87CE5498-68D6-44E5-9215-6DA47EF883D8}") ; IID_ISimpleAudioVolume
            ObjRelease(ssn)
            if !sav
                Return
            DllCall(NumGet(NumGet(sav+0)+6*A_PtrSize), "uint", sav, "int*", mute) ; GetMute
            if (Key = "Vol")
            {
                DllCall(NumGet(NumGet(sav+0)+4*A_PtrSize), "uint", sav, "float*", volume) ; GetVolume
                if mute = 1
                    DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), "uint", sav, "int", 0) ; SetMute
                vol := (volume + Val / 100)
                vol := (vol > 1) ? 1 : (vol < 0) ? 0 : vol
                DllCall(NumGet(NumGet(sav+0)+3*A_PtrSize), "uint", sav, "float", vol) ; SetVolume
                Return Round(vol*100), ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = "Mute")
            {
                if (Val = "Get")
                    Return mute, ObjRelease(sav), ObjRelease(enm)
                DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), "uint", sav, "int", mute := (Val = 2) ? !mute : Val) ; SetMute
                Return mute, ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = "SetVol")
            {
                if mute = 1
                    DllCall(NumGet(NumGet(sav+0)+5*A_PtrSize), "uint", sav, "int", 0) ; SetMute
                DllCall(NumGet(NumGet(sav+0)+3*A_PtrSize), "uint", sav, "float", Val / 100) ; SetVolume
                Return Val, ObjRelease(sav), ObjRelease(enm)
            }
            if (Key = "GetVol")
            {
                DllCall(NumGet(NumGet(sav+0)+4*A_PtrSize), "uint", sav, "float*", volume) ; GetVolume
                Return Round(volume*100), ObjRelease(sav), ObjRelease(enm)
            }
        }
        ObjRelease(ssn)
        ListPid .= curpid "|"
    }
    ObjRelease(enm)

    if (Key = "ListPid")
    {
        Loop, parse, ListPid, |
            List .= (WinExist("ahk_pid " A_LoopField) ? A_LoopField "|" : "")
        Return RTrim( List, "|")
    }
}

Функцию "VA_AppVolume" можно просто добавить в библиотеку "VA".

------------------------------

Приложенный файл - библиотека VA-2.2 с добавленной функцией  VA_AppVolume.

Post's attachments

VA.ahk 36.49 kb, 28 downloads since 2013-04-25 

You don't have the permssions to download the attachments of this post.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

75

Re: AHK: Управление звуком в windows 7

Кто-нибудь озадачивался вопросом снятия уровня (в условных единицах), например, стерео микшера? Не уровень регулировки, а именно уровень сигнала, по типу того что выдает в графическом виде VU meter и другие подобные программы?
Мне нужно запрограммировать наличие или отсутствие звука, но с VA пока не разобрался, т.к. достаточно объемная библиотека.
ОС Win 7 x64.

76

Re: AHK: Управление звуком в windows 7

Вот тема.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

77

Re: AHK: Управление звуком в windows 7

Alectric пишет:

Вот тема.

Спасибо большое! Лаконично и по делу))

78 (изменено: emmetoya, 2014-10-07 12:42:39)

Re: AHK: Управление звуком в windows 7

У меня есть два источника звука в системе - два плеера (два instance одной программы). Мне необходимо определить из какого есть звук, из какого нет.

За исходный код взят

#Persistent

audioMeter := VA_GetAudioMeter()
VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
VarSetCapacity(peakValues, channelCount*4)
SetTimer, GetPeakValues, 100
return

GetPeakValues:
    VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &peakValues)
    loop %channelCount%
        ToolTip %v%
    until v := NumGet(peakValues, A_Index*4-4, "float")
    return

Аргумент A_Index*4-4 в строке может принимать значения 0,4,8,12 и т.д. для своей системы опытным путем выяснил, что аргумент равен 4.

v := NumGet(peakValues, A_Index*4-4, "float")


Поступаю следующим образом - измеряемый источник в нормальном состоянии, второй mute. Запускаю функцию, которая делает 5 замеров с интервалом в 150 мс и суммирует полученные значения, по результатам делаю вывод звук есть/нет.

Если выключить оба источника сразу, отрабатывает нормально
Если включить оба сразу, так же срабатывает адекватно.
НО если включить один, сделать mute (ползунком громкости или клавишей mute не важно) на второй.. все равно считываемое значение больше "нуля", т.е. получается будто сигнал есть. Если закрыть одну из программ, то отрабатывает правильно, реагирует на громкость. Дополнительно контролировал по графическому отображению уровней сигналов в микшере записывающих устройств Windows - Алгоритмически все работает правильно, mute одного из источников действительно оставляет уровень другого.

Уже пробовал разные варианты - увеличивал интервалы между считыванием уровня громкости (например если mute у плеера происходит не мгновенно, а постепенно), запускал внутри функции проверки, или делал несколько вызовов функции, не получается ни в том ни в другом случае.

Я не силен в программинге под Win, но складывается такое ощущение, что либо я считываю не тот участок памяти, либо после mute одного из них, уровень на самом деле не изменяется, остается в памяти от второго приложения. Либо это заморочки с тем, что это две копии одного приложения ( хотя работают независимо друг от друга, проверено).

Поэтому вопросов два - первый по этой проблеме, второй можно ли каким-то образом узнать уровень звукового сигнала, генерируемого определенным окном?
Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать.


soundTestMux(MuxNumber)
    {
        audioMeter := VA_GetAudioMeter()
        VA_IAudioMeterInformation_GetMeteringChannelCount(audioMeter, channelCount)
        VarSetCapacity(peakValues, channelCount*4)
        VA_IAudioMeterInformation_GetChannelsPeakValues(audioMeter, channelCount, &peakValues)
        
        if MuxNumber = 1
            {
                soundTestMuxVar:= false
                soundLevel := 0
                measureCount := 0
                if !Mux2isMuted
                    muteMux2()
                NumGet(peakValues, 4, "float")
                while measureCount <5
                    {
                        v := NumGet(peakValues, 4, "float")
                        soundLevel := soundLevel + v
                        Sleep, 150
                        measureCount++
                    }
                ToolTip, Mux 1 %soundLevel%
                if (soundLevel > 0.000153)
                    {
                        if Mux2isMuted
                            muteMux2()
                        soundTestMuxVar := true
                    }
                        else
                            {
                                                   soundTestMuxVar := false
                                    if Mux2isMuted
                                        muteMux2()
                            }

            Tooltip, RESULT MUX1 %soundTestMuxVar%
            }
        }

79 (изменено: Alectric, 2014-10-07 15:31:16)

Re: AHK: Управление звуком в windows 7

Насколько я знаю VA.ahk не умеет контролировать уровни приложений - только уровни устройств.

emmetoya пишет:

Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать.

Необязательно через графику можно найти другой путь. Например, если в названии (или в "контролле") окна меняется время или вроде того.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

80

Re: AHK: Управление звуком в windows 7

Alectric пишет:

Насколько я знаю VA.ahk не умеет контролировать уровни приложений - только уровни устройств.

emmetoya пишет:

Если не получится решить так, придется делать обработчик через анализ графики программы типа VU Meter, что ооочень бы не хотелось делать.

Необязательно через графику можно найти другой путь. Например, если в названии (или в "контролле") окна меняется время или вроде того.

Пробовал через WinGetText, но подходящего графического с текстовым дублированием не встретил.
Вообще сегодня добил эту тему.. в итоге оказалось что сами значения снимаются правильно, неправильно отрабатывал mute. Но сколько это стоило сил и времени...

81

Re: AHK: Управление звуком в windows 7

Я на пример использую бесплатное приложение "Volume2 " . Очень удобно и много функций.
Вот - кому интересно http://www.softportal.com/software-18603-volume2.html

Win10 x64

82

Re: AHK: Управление звуком в windows 7

Заметил такой факт - при Mute уровень звука меняется не скачкообразно, а плавно примерно за 500-600 мс. Для моих задач это весьма большая пауза "на ровном месте". Причем такое поведение не только в используемом стороннем софте, а в любых приложениях, видимо это чисто виндовая тема. Подскажите как это побороть, или это никак не исправить?