Страница 1 из 13 123456711 ... ПоследняяПоследняя
Показано с 1 по 10 из 125
  1. #1
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Мой новый AHK-скрипт

    Собственно, запуск по горячим клавишам экзешника, передающего команду РоадРаннеру, меня практически полностью удовлетворял бы, если б не мерзко низкая производительность компа - время на запуск экзешника тратилось многовато, в некоторых случаях до нескольких секунд...

    Второй момент - для снятия скриншотов я использовал резидента, висящего в трее и снимающего скриншоты по клавиатурной комбинации, выдаваемой avc_usb.exe (интерфейсная программа адаптера avc-lan). Резидент хороший, но в условиях цейтнота ресурсов поедающий 99.99% времени в нерабочем состоянии.

    Еще хотелось получить правую кнопку мышки без долгого удерживания пальца на одном месте экрана.

    Ну, и еще один минус вылез при использовании iGO под RR в качестве навигашки - при переключении треков кнопками штатной консоли картинка iGO замирала, приходилось тыкать в экран для оживления.

    Написал новый скриптец AHK вместо старого (из первого поста).
    Теперь он сам при помощи mspaint'а снимает скриншот (mspaint загружается только для записи скриншота на диск и сразу выгружается), а также сам передаёт клавиши смены трека в RR без помощи дополнительных экзешников, а потом возвращает фокус в то окно, где он был до этого (в тот же iGO, например).

    Адаптер avc-lan (точнее, avc_usb.exe) настроен так, что на первую служебную клавишу (правая кнопка мышки) выдаёт комбинацию Ctrl-Alt-Shift-a, на вторую служебную клавишу (скриншот) выдаёт комбинацию Ctrl-Alt-Shift-b, на клавишу предыдущего трека (предыдущий трек) - Ctrl-Alt-Shift-g, на клавишу следующего трека (следующий трек) - Ctrl-Alt-Shift-f, на клавишу перемотки назад (гамма) - Ctrl-Alt-Shift-i, на клавишу перемотки вперед (воспроизведение/стоп) - Ctrl-Alt-Shift-h.

    В конфиге RR (KeyTBL.ini):
    Код:
    78,"NEXT"
    66,"PREV"
    80,"PLAY"
    71,"GAMMA"
    Сам AHK-скрипт (запускается при старте винды):
    Код:
    #NoTrayIcon		; не отображать значок скрипта в трее
    #SingleInstance force	; перезагрузить скрипт, если он уже запущен
    DetectHiddenWindows, On	; искать в скрытых окнах
    #NoEnv			; запрещаем имена переменных как у переменных окружения
    SendMode Input		; ускорренный ввод
    ;~ #WinActivateForce	; жесткая активация окна
    
    ^!+a::RButton		; имитация правой кнопки мышки
    
    ^!+b::			; screenshot
    ;делаем снимок экрана
    Send, {PRINTSCREEN} ; снимок всего экрана (PrtSc)
    ;Send, !{PRINTSCREEN} ; снимок активного окна (Alt + PrtSc)
    ;создаём пустой файл
    FileAppend,, C:\PrScr.bmp
    ;открываем пустой файл в скрытом окне Paint
    Run, mspaint C:\PrScr.bmp,, Hide
    ;ждём запуска Paint
    WinWait, PrScr.bmp - Paint
    ;команда меню "Правка" - "Вставить"
    PostMessage, 0x111, 57637, 0, , PrScr.bmp - Paint
    ;команда меню "Файл" - "Сохранить"
    PostMessage, 0x111, 57603, 0, , PrScr.bmp - Paint
    ;команда меню "Файл" - "Выход"
    PostMessage, 0x111, 57665, 0, , PrScr.bmp - Paint
    ;ждём завершения работы Paint
    WinWaitClose, PrScr.bmp - Paint
    FileGetTime, OutputVar, C:\PrScr.bmp, C
    ;переносим итоговый файл в хранилище и меняем ему имя на уникальное
    FileMove C:\PrScr.bmp, C:\Scrns\ss_%OutputVar%.bmp
    return
    
    ^!+f::			; RR command NEXT
    IfWinExist, RoadRunner
    {
    	WinGet, active_pid, PID, A
            WinActivate, RoadRunner
    	WinWaitActive, RoadRunner, , 2
    	Send n
    	WinActivate, ahk_pid %active_pid%
    }
    return
    
    ^!+g::			; RR command PREV
    IfWinExist, RoadRunner
    {
    	WinGet, active_pid, PID, A
    	WinActivate, RoadRunner
    	WinWaitActive, RoadRunner, , 2
    	Send b
    	WinActivate, ahk_pid %active_pid%
    }
    return
    
    ^!+h::			; RR command PLAY
    IfWinExist, RoadRunner
    {
    	WinGet, active_pid, PID, A
    	WinActivate, RoadRunner
    	WinWaitActive, RoadRunner, , 2
    	Send p
    	WinActivate, ahk_pid %active_pid%
    }
    return
    
    ^!+i::			; RR command GAMMA
    IfWinExist, RoadRunner
    {
    	WinGet, active_pid, PID, A
    	WinActivate, RoadRunner
    	WinWaitActive, RoadRunner, , 2
    	Send g
    	WinActivate, ahk_pid %active_pid%
    }
    return
    Из недостатоков данного скрипта пока обнаружил один - при передаче клавиш управления в RR при запущенной внешней проге (той же навигашке), окно внешней проги вздрагивает.
    Возможно, удастся эт дело как-то победить, но как - я пока не нашел.
    С уважением, Алексей
    Мой Prius NHW11

  2. #2
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Мой новый AHK-скрипт

    Новый вариант

    В конфиге RR (KeyTBL.ini) теперь пусто (файл я удалил).

    AHK-скрипт (avc_control.ahk, запускается при старте винды):
    Код:
    #NoTrayIcon		; не отображать значок скрипта в трее
    #SingleInstance force	; перезагрузить скрипт, если он уже запущен
    DetectHiddenWindows, On	; искать в скрытых окнах
    #NoEnv			; запрещаем имена переменных как у переменных окружения
    SendMode Input		; ускорренный ввод
    
    ^!+a::RButton		; имитация правой кнопки мышки
    
    ^!+b::			; screenshot
    ;делаем снимок экрана
    Send, {PRINTSCREEN} ; снимок всего экрана (PrtSc)
    ;Send, !{PRINTSCREEN} ; снимок активного окна (Alt + PrtSc)
    ;создаём пустой файл
    FileAppend,, C:\PrScr.bmp
    ;открываем пустой файл в скрытом окне Paint
    Run, mspaint C:\PrScr.bmp,, Hide
    ;ждём запуска Paint
    WinWait, PrScr.bmp - Paint
    ;команда меню "Правка" - "Вставить"
    PostMessage, 0x111, 57637, 0, , PrScr.bmp - Paint
    ;команда меню "Файл" - "Сохранить"
    PostMessage, 0x111, 57603, 0, , PrScr.bmp - Paint
    ;команда меню "Файл" - "Выход"
    PostMessage, 0x111, 57665, 0, , PrScr.bmp - Paint
    ;ждём завершения работы Paint
    WinWaitClose, PrScr.bmp - Paint
    FileGetTime, OutputVar, C:\PrScr.bmp, C
    ;переносим итоговый файл в хранилище и меняем ему имя на уникальное
    FileMove C:\PrScr.bmp, C:\Scrns\ss_%OutputVar%.bmp
    return
    
    ^!+f::			; NEXT теперь передаём сразу винампу
    PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
    return
    
    ^!+g::			; PREV теперь передаём сразу винампу
    PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
    return
    
    ^!+h::			; 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
    
    ^!+i::			; RR command GAMMA
    Run, "C:\Program Files\RoadRunner\Exec.exe" GAMMA
    return
    Вздрагивания окна внешней проги теперь нет.
    Последний раз редактировалось ashu; 27.08.2008 в 22:35.
    С уважением, Алексей
    Мой Prius NHW11

  3. #3
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Мой новый 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
    Последний раз редактировалось ashu; 07.11.2008 в 18:41.
    С уважением, Алексей
    Мой Prius NHW11

  4. #4
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Доп.проги автоматизации

    Вчера вечером от него делать, видимо , увеличил количество кода в avc_control.ahk - немного расширил функционал: теперь он еще следит за логом СитиГида (History.txt) и выводит из него время последнего успешно полученного пробочного файла в RR-скин СитиГида (плюс, меняет цвет времени файла пробок с зеленого на красный, если файл пробок старее 15 минут). Заодно перевтыкает usb-адаптер bluetooth, если обнаружит ошибку связи (один раз, обычно помогает).
    Еще немного поотлавливаю в нём косяки (утром уже два нашел) и, если кому интересно, выложу тут
    С уважением, Алексей
    Мой Prius NHW11

  5. #5
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Доп.проги автоматизации

    Всё ж, наверное, лучшее - враг хорошего... Переделал скриптец... Теперь помимо слежения за логом СитиГида он еще общается туда-сюда с RR через SendMessage и обслуживает интернет-подключение... Осталось отловить всех жуков
    С уважением, Алексей
    Мой Prius NHW11

  6. #6
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Примеры ahk-скриптов

    Ну, вроде б ошибки отловил...

    [Скрипт содержал ошибки, поэтому удалён. Новая версия ниже в ветке]
    Последний раз редактировалось ashu; 26.11.2008 в 13:15.
    С уважением, Алексей
    Мой Prius NHW11

  7. #7
    Гуру Аватар для Parador
    Регистрация
    23.12.2007
    Возраст
    57
    Сообщений
    828
    Вес репутации
    542

    По умолчанию Re: Примеры ahk-скриптов

    Нет слов, одни слюни. А нельзя ли вывести например датчик пробок прямо на экран CG?
    Продаю домик у моря.
    Все в мире го*но, кроме мочи.

  8. #8
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Примеры ahk-скриптов

    Цитата Сообщение от Parador
    Нет слов, одни слюни. А нельзя ли вывести например датчик пробок прямо на экран CG?
    Почти так и сделано (3 - это возраст пробочного файла в 3 минуты):

    Последний раз редактировалось ashu; 23.11.2008 в 22:29.
    С уважением, Алексей
    Мой Prius NHW11

  9. #9
    Гуру Аватар для Parador
    Регистрация
    23.12.2007
    Возраст
    57
    Сообщений
    828
    Вес репутации
    542

    По умолчанию Re: Примеры ahk-скриптов

    Не, не. У меня Инфилл со своей ИнфиллСтанцией , менять оболочку не хочется. Каким образом можно прикрутить данную мульку?
    Продаю домик у моря.
    Все в мире го*но, кроме мочи.

  10. #10
    Гуру Аватар для ashu
    Регистрация
    29.01.2008
    Возраст
    46
    Сообщений
    1,161
    Вес репутации
    518

    По умолчанию Re: Примеры ahk-скриптов

    Цитата Сообщение от Parador
    Не, не. У меня Инфилл со своей ИнфиллСтанцией , менять оболочку не хочется. Каким образом можно прикрутить данную мульку?
    Эт надо у спецов по оболочке инфилла поспрашивать - как можно править её скины и/или встраивать свои плагины
    С уважением, Алексей
    Мой Prius NHW11

Страница 1 из 13 123456711 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •