Показать сообщение отдельно
Старый 07.11.2008, 17:37   #30
ashu
Старший Пользователь
 
Аватар для ashu
 
Регистрация: 25.11.2007
Возраст: 51
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
ashu has a spectacular aura aboutashu has a spectacular aura about
По умолчанию Мой скрипт avc_control.ahk, запускаемый при старте системы

Мой скрипт avc_control.ahk, запускаемый при старте системы

Выполняемые скриптом задачи:

1. Иногда при выходе из спящего режима RR не запускает автоматически WinAmp на воспроизведение. Подозреваю, что это связано с задержками, вызванными моим решением проблемы долгой инициализации звуковой usb-карты - перезапуском WinAmp'а. Скрипт avc_control.ahk отслеживает перезапуск WinAmp'а и посылает ему команду на начало воспроизведения.

2. Как показало расследование, в моём компе есть некий глюк то ли программный - в дровах, то ли аппаратный - в материнке... Но так или иначе случаются проблемы с зависанием компа после выходы из спящего режима. Эти проблемы, как мне кажется, решены (описано чуть выше). Однако, редко, но после выхода из спящего режима случается проблема вылета по ошибке какой-то службы Windows. Причём, только тогда, когда запущен и работает СитиГид... Как выяснилось, вылетает служба Windows Audio. Забавно, но WinAmp при этом продолжает нормально работать. Скрипт avc_control.ahk обрабатывает эту ситуацию - скидывает окно сообщения об ошибке и перезапускает службу Windows Audio.

3. В случае не планируемой перезагрузки компа (например, по кнопке питания или через reset) PowerStrip выкидывает окно с вопросом о восстановлении. На нём надо всего лишь нажать "Да", с чем успешно справляется утилитка от kolychev'а, но зачем запускать кучу прог, когда всё можно сделать силами того же скрипта avc_control.ahk?

4. Обработка клавиатурных комбинаций, приходящих при нажатии штатных кнопок на консоли от avc_usb.exe - управление WinAmp'ом, снятие скриншота и передача горячих клавиш в PowerStrip для управлением гаммой "день/ночь" и показом/скрытием мышки.

5. Имитация нажатия правой кнопки мышки

Чтобы RR не путал WinAmp и KMPlayer, WinAmp через настройки RR запускается с идентификатором класса RRWinamp.

Код:
#NoTrayIcon             ; не отображать значок скрипта в трее
#SingleInstance force   ; перезагрузить скрипт, если он уже запущен
DetectHiddenWindows, On ; искать в скрытых окнах
#NoEnv                  ; запрещаем имена переменных как у переменных окружения
SendMode Input          ; ускоренный ввод

WinAmpActive := 0 ; первоначально считаем, что WinAmp не запущен
day := 1 ; гамма в положении "день"

; Вечный цикл обработки ситуаций
Loop
{
        If WinAmpActive = 0
        {
                IfWinExist, ahk_class RRWinamp
                {
; WinAmp не был запущен, а сейчас найден в списке окон
                        Sleep 2000 ; подождать 2 секунды пока WinAmp запускается
                        PostMessage, 0x111, 40045,,, ahk_class RRWinamp ; включить воспроизведение
                        WinAmpActive := 1 ; считаем WinAmp запущенным
                }
        }
        Else
        {
                IfWinNotExist, ahk_class RRWinamp
                {
; Считали WinAmp запущенным, а сейчас не видим в списке окон
                        WinAmpActive := 0 ; считаем WinAmp не запущенным
                }
        }
        IfWinExist, Меры предосторожности
        {
; Найдено стартовое окно восстановления PowerStrip'а
                WinActivate
                Send, Д ; нажимаем кнопку "Да"
        }
        IfWinExist, svchost.exe - Ошибка приложения
        {
; Скидываем полученную ошибку приложения (вероятнее всего служба Windows Audio)
                WinActivate
                Send, {Esc} ; посылаем нажатие клавиши Escape - нажатие кнопки Cancel на форме
                Run, nircmd service restart AudioSrv,, Hide ; перезапускаем службу Windows Audio
        }
        Sleep 1000 ; спим 1 секунду и повторяем проверки
}

; Транслируем нажатие кнопки на консоли в горячую клавиатурную комбинацию
; для PowerStrip'а - включение/выключение режима скрытия указателя мышки
^!+c::^!5

^!+b::RButton           ; имитация правой кнопки мышки

^!+a::                  ; делаем screenshot всего экрана
RunWait, nircmd savescreenshot C:\PrScr.png,, Hide
FileGetTime, OutputVar, C:\PrScr.png, C
FileMove C:\PrScr.png, C:\Scrns\ss_%OutputVar%.png
return

^!+e::                  ; переключаемся на следующий трек
PostMessage, 0x111, 40048,,, ahk_class RRWinamp ; следующий трек
return

^!+f::                  ; переключаемся на предыдущий трек
PostMessage, 0x111, 40044,,, ahk_class RRWinamp ; предыдущий трек
return

^!+h::                  ; кнопка воспроизведение/пауза
SendMessage, 0x400,, 104,, ahk_class RRWinamp ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
        PostMessage, 0x111, 40045,,, ahk_class RRWinamp ; включить воспроизведение
Else ; если воспроизводится, то...
        PostMessage, 0x111, 40046,,, ahk_class RRWinamp ; поставить на паузу
return

^!+i::                  ; переключение гаммы "день/ночь" - посылаем комбинации в PowerStrip
If(!day)
{
        Send, ^!1 ; посылаем в PowerStrip - "включить дневной профиль"
        day := 1
}
Else
{
        Send, ^!2 ; посылаем в PowerStrip - "включить ночной профиль"
        day := 0
}
return
__________________
Мой Toyota Prius NHW11
ashu вне форума   Ответить с цитированием