1 (изменено: Androgen, 2007-05-05 18:13:13)

Тема: AutoHotkey: Управление Winamp'ом

Я, когда сижу за компом, почти всегда что-нибудь слушаю (не обязательно музыку). Юзаю Winamp. При этом, на мой взгляд, управлять им с клавиатуры несравнимо удобнее, чем тыкать мышью. С Winamp'ом поставляется плагинчик, для назначения горячих клавиш. Однако он не так гибок в назначении нужных клавиш. Кроме того, он отъедает ресурсы компа (скрипт, конечно, тоже, но скрипт все равно у меня постоянно загружен, так что плюс-минус десяток хоткеев  - роли не играют). Мне удобно управлять Winamp'ом с цифровой клавиатуры, однако, надеюсь, что вы не станете стесняться переназначить клавиши на свой вкус .
В предлагаемом скрипте я урезал управление громкостью, чтобы не загромождать идею .

;*****************************************************************************
; AutoHotkey Version:   1.0.41.01+
; Автор:                Androgen Belkin
; Имя скрипта:          ControlsWinamp.ahk (v.2.1)
;*****************************************************************************
; Управление Winamp'ом с NamPad'а (цифровая клавиатура).
;*****************************************************************************
#NoTrayIcon        ; не отображать иконку скрипта в трее
#NoEnv          ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)
SendMode Input     ; новый режим высылки без задержки и повышенной надежности
DetectHiddenWindows, On    ; искать в скрытых окнах (если Winamp свернут)

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ==========
Winamp_Path = D:\Program_2\Winamp\winamp.exe ; путь к Winamp'у
Vol_Step = 4 ; на сколько процентов изменять громкость за один раз
; ========== КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ ==========

$Numpad0:: Send, {Numpad0} ; высылать Numpad0 всегда, кроме тех случаев, когда он используется в горячих клавишах
$NumpadIns:: Send, {NumpadIns} ; высылать NumpadIns всегда, кроме тех случаев, когда он используется в горячих клавишах
$NumLock:: Send, {NumLock} ; высылать NumLock всегда, кроме тех случаев, когда он используется в горячих клавишах

; ========== ЗАПУСТИТЬ WINAMP ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadEnter:: ; запустить winamp
Numpad0 & NumpadEnter:: ; запустить winamp
Launch_Media:: ; обработка мультимедийной клавы
;-----------------------------------------------------------------------------
    IfNotExist, %Winamp_Path% ; если НЕ существует указанный файл для запуска, то...
        Return ; закончить обработку горячей клавиши
; Если путь указан верно, то...
    Process, Exist, Winamp.exe ; проверить существование процесса
    If ErrorLevel <> 0 ; если Winamp уже запущен, то...
        WinActivate, ahk_class Winamp v1.x ; активировать окно
    ; если не запущен, то...
    Run, %Winamp_Path% ; запустить
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ЗАКРЫТЬ WINAMP ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadDel:: ; закрыть winamp
Numpad0 & NumpadDot:: ; закрыть winamp
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40001,,, ahk_class Winamp v1.x ; закрыть Winamp
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВОСПРОИЗВЕДЕНИЕ/ПАУЗА ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadClear:: ; воспроизведение/пауза
Numpad0 & Numpad5:: ; воспроизведение/пауза
Media_Play_Pause:: ; обработка мультимедийной клавы
;-----------------------------------------------------------------------------
SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверка воспроизведения
    If ErrorLevel = 0 ; если не воспроизводится, то...
        PostMessage, 0x111, 40045,,, ahk_class Winamp v1.x ; включить воспроизведение
    Else ; если воспроизводится, то...
        PostMessage, 0x111, 40046,,, ahk_class Winamp v1.x ; поставить на паузу
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВОСПРОИЗВЕДЕНИЕ/ПАУЗА ПРОБЕЛОМ ==========
;-----------------------------------------------------------------------------
~Space:: ; воспроизведение/пауза (если активно окно Winamp)
;-----------------------------------------------------------------------------
    IfWinActive, ahk_class BaseWindow_RootWnd ; если активное окно - Winamp
    {
        SendMessage, 0x400,, 104,, ahk_class Winamp v1.x ; проверка воспроизведения
        If ErrorLevel = 0 ; если не воспроизводится, то...
            PostMessage, 0x111, 40045,,, ahk_class Winamp v1.x ; включить воспроизведение
        Else ; если воспроизводится, то...
            PostMessage, 0x111, 40046,,, ahk_class Winamp v1.x ; поставить на паузу
    }
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ПРЕДЫДУЩИЙ ТРЕК ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadLeft:: ; предыдущий трек
Numpad0 & Numpad4:: ; предыдущий трек
Media_Prev:: ; обработка мультимедийной клавы
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== СЛЕДУЮЩИЙ ТРЕК ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadRight:: ; следующий трек
Numpad0 & Numpad6:: ; следующий трек
Media_Next:: ; обработка мультимедийной клавы
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== НАЗАД НА 5 СЕКУНД ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadHome:: ; назад на 5 секунд
Numpad0 & Numpad7:: ; назад на 5 секунд
^Media_Prev:: ; обработка мультимедийной клавы (CTRL+)
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40144,,, ahk_class Winamp v1.x ; назад на 5 секунд
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВПЕРЕД НА 5 СЕКУНД ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadPgUp:: ; вперед на 5 секунд
Numpad0 & Numpad9:: ; вперед на 5 секунд
^Media_Next:: ; обработка мультимедийной клавы (CTRL+)
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40148,,, ahk_class Winamp v1.x ; вперед на 5 секунд
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ============== ОСТАНОВИТЬ ===============
;-----------------------------------------------------------------------------
NumpadIns & NumpadEnd:: ; остановить
Numpad0 & Numpad1:: ; остановить
Media_Stop:: ; обработка мультимедийной клавы
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40047,,, ahk_class Winamp v1.x ; остановить воспроизведение
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВОСПРОИЗВОДИТЬ ВРАЗБРОС =============
;-----------------------------------------------------------------------------
NumLock & NumpadMult:: ; воспроизводить вразброс (включить/выключить)
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40023,,, ahk_class Winamp v1.x ; воспроизводить вразброс
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== СВЕРНУТЬ/РАЗВЕРНУТЬ ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadMult:: ; свернуть/развернуть
Numpad0 & NumpadMult:: ; свернуть/развернуть
WinAmp_Min_Restore: ; метка входа из WIN+S (она понадобится, если использовать скрипт для управления окнами)
;-----------------------------------------------------------------------------
    WinGet, State, MinMax, ahk_class Winamp v1.x
    If State = -1 ; если окно минимизировано, то...
        WinActivate, ahk_class Winamp v1.x ; восстановить свернутое окно
    Else ; если окно НЕ минимизировано, то...
    {
        IfWinActive, ahk_class BaseWindow_RootWnd ; если окно активно, то...
            WinMinimize, ahk_class Winamp v1.x ; свернуть окно
        Else ; если окно НЕ активно, то...
            WinActivate, ahk_class Winamp v1.x ; активизировать окно (вывести на передний план)
    }
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ДИАЛОГ ОТКРЫТИЯ ФАЙЛОВ ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadDiv:: ; диалог открытия файлов
Numpad0 & NumpadDiv:: ; диалог открытия файлов
;-----------------------------------------------------------------------------
    WinActivate, ahk_class Winamp v1.x ; активизировать окно
    PostMessage, 0x111, 40029,,, ahk_class Winamp v1.x ; открытие окна открытия
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ОКНО - ПОВЕРХ ВСЕХ ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadUp:: ; окно winamp - поверх всех
Numpad0 & Numpad8:: ; окно winamp - поверх всех
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40019,,, ahk_class Winamp v1.x ; окно - поверх всех
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ПОКАЗАТЬ/СКРЫТЬ ПЛЕЙ-ЛИСТ ==========
;-----------------------------------------------------------------------------
NumpadIns & NumpadDown:: ; показать/скрыть плей-лист
Numpad0 & Numpad2:: ; показать/скрыть плей-лист
;-----------------------------------------------------------------------------
    PostMessage, 0x111, 40040,,, ahk_class Winamp v1.x ; показать/скрыть плей-лист
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== УДАЛИТЬ ФАЙЛ С ДИСКА =============
;-----------------------------------------------------------------------------
~+DEL:: ; SHIFT+DEL - удалить файл с диска
;-----------------------------------------------------------------------------
    IfWinActive, Playlist Editor ; если активно окно "Playlist Editor"
    {
        Send, !+{DEL} ; нажать ALT+SHIFT+DEL (удалить файлы с диска)
        KeyWait, DEL ; ожидать пока клавиша не будет отпущена (чтобы исключить срабатывание от простого удержания нажатой клавиши)
    ; ========== ... И СОХРАНЕНИЕ ПЛЕЙ-ЛИСТА =============
;~          Send, ^{sc01F} ; выслать CTRL+S (сохранить плей-лист)
    }
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВЫКЛЮЧИТЬ ЗВУК =============
;-----------------------------------------------------------------------------
NumLock & NumpadSub:: ; выключить звук
;-----------------------------------------------------------------------------
    SoundSet, 1,, Mute ; выключить все звуковые устройства
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== ВКЛЮЧИТЬ ЗВУК =============
;-----------------------------------------------------------------------------
NumLock & NumpadAdd:: ; включить звук
;-----------------------------------------------------------------------------
    SoundSet, 0,, Mute ; включить все звуковые устройства
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== УМЕНЬШИТЬ ГРОМКОСТЬ =============
;-----------------------------------------------------------------------------
NumpadIns & NumpadSub:: ; уменьшить громкость
Numpad0 & NumpadSub:: ; уменьшить громкость
;-----------------------------------------------------------------------------
    IfWinExist, ahk_class Winamp v1.x
        Loop, %Vol_Step%
            PostMessage, 0x111, 40059,,, ahk_class Winamp v1.x ; уменьшить звук
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------


; ========== УВЕЛИЧИТЬ ГРОМКОСТЬ =============
;-----------------------------------------------------------------------------
NumpadIns & NumpadAdd:: ; увеличить громкость
Numpad0 & NumpadAdd:: ; увеличить громкость
;-----------------------------------------------------------------------------
    IfWinExist, ahk_class Winamp v1.x
        Loop, %Vol_Step%
            PostMessage, 0x111, 40058,,, ahk_class Winamp v1.x ; увеличить звук
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------

А здесь можно посмотреть и взять скрипт, совмещающий управление Foobar'ом и WinAmp'ом

Крокодил, крокожу и буду крокодить! (Твёрдое обещание нетрезвого кодера).