Код:
#NoTrayIcon ; не отображать значок скрипта в трее
#SingleInstance force ; перезагрузить скрипт, если он уже запущен
DetectHiddenWindows, On ; искать в скрытых окнах
#NoEnv ; запрещаем имена переменных как у переменных окружения
SendMode Input ; ускорренный ввод
#Persistent ; держать скрипт запущенным
SetTitleMatchMode 2 ; 2 - заголовок окна должен содержать значение, заданное в параметре
; ----------- редактируемые переменные - настройки ------------
winampid := "RRWinamp" ; идентификатор класса окна винампа
cityguide := "City Guide" ; название окна CityGuide
myconnection := "BluetoothConnection" ; название подключения к Инету
btadapter := "Jabra - A320s" ; название адаптера bluetooth
pinghost1 := "193.125.152.104" ; кого мучаем пингами в первую очередь (www.relcom.ru)
pinghost2 := "194.87.0.50" ; кого мучаем пингами во вторую очередь (www.ru)
onlinestr := "В сети" ; сообщение "Online" на экране (переменная RR OnlineStatus)
offlinestr := "---" ; сообщение "Offline" на экране
chkonline := "+ +" ; сообщение "постоянное подключение" на экране
pstripwin1 := "Меры предосторожности" ; название стартового окна 1 восстановления PowerStrip'а
pstripwin2 := "PowerStrip Configuration Problem" ; название стартового окна 2 восстановления PowerStrip'а
svhostwin := "svchost.exe - Ошибка приложения" ; название окна ошибки службы (вероятнее всего служба Windows Audio)
winamperror := "DirectSound output" ; название окна винампа с ошибкой звукового устройства
winamppath := "C:\Program Files\Winamp\winamp.exe" ; путь к исполняемому файлу winamp'а
checkperiod := 30 ; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
;myjamfile := "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
myjamfile := "C:\Program Files\City Guide CarPC 3\78SPb.jam" ; за каким файлом пробок следим (тестовый)
jamgreen := 8 ; до скольки минут считать возраст пробок зеленым
jamred := 50 ; до скольки минут считать возраст пробок красным
empty := "нет" ; что пишем на экране, если пробочный файл очень старый
camgrabbererror := "CamGraber full error" ; ошибка camgrabber'а
kmperror := "KMPlayer error in file" ; ошибка kmplayer'а
karaoke := "vanBasco's Karaoke Player" ; название окна karaoke player'а
kardel := ".kar - vanBasco's Karaoke Player" ; что не надо выводить в названии песни
videosource := "C:\camera\*.*" ; маска видеофайлов для переноса на usb-накопитель
gpsdatasource := "C:\GpsData\*.*" ; маска файлов с gps-инфой (их только копируем)
videodest := "G:\camera" ; путь, куда надо переносить видеофайлы
videodestD := "G" ; буква диска пути для отключения из системы
videodest2 := "F:\camera" ; альтернативный путь, куда надо переносить видеофайлы
videodest2D := "F" ; буква диска альтернативного пути для отключения из системы
; -------- конец редактируемых переменных - настроек ----------
WinAmpActive := 1
WinAmpWait := 0
KaraokeActive := 0
CityGuideActive := 0
day := 1
online := 0
setoffline := 0
oncheckonline := 0
Lastcheck := 0
checkperiod := - checkperiod * 1000
jamexpired := 1
karprev := ""
onvideomove := 0
KMPActive := 0
; Окно для получения команд управления от RR и для отображения текущей песни караоке
CustomColor := "90FF55"
MyTextEmpty := ""
Gui, +Owner
gui, color, 000000
gui, font, s48 bold, Arial
Gui, Add, Text, c%CustomColor% x0 y0 w830 h170 vMyRed, Название песни
Gui, +LastFound +AlwaysOnTop
WinSet, TransColor, 000000 200
Gui, -Caption +Disabled -SysMenu
Gui, Show, x-800 y0 w800 h150 NoActivate, avc_control.ahk
KarShow := 0
WinHide, avc_control.ahk
; Устанавливаем обработчик для приёма команд через WM_COPYDATA от RR
OnMessage(0x4A, "OnCopyData")
SetTimer, CheckWarnings, 2000
SetTimer, CheckJam, 30000
SetTimer, CheckInternet, %checkperiod%, -1 ; периодическая проверка подключения к Интернету (с пониженным приоритетом)
return
ShowHideKaraoke:
IfWinExist, ahk_class vanBascoPlayerClass
{
If (KarShow <> 1)
{
WinShow, avc_control.ahk
KarShow := 1
}
WinGetTitle, KarTitle, ahk_class vanBascoPlayerClass
if (karperv <> KarTitle)
{
karprev := KarTitle
StringReplace, KarTitle, KarTitle, %kardel%, , All
StringReplace, KarTitle, KarTitle, _, %A_Space%, All
StringReplace, KarTitle, KarTitle, =, `r`n, All
GuiControl, Text, MyRed, %KarTitle%
}
}
Else
{
If (KarShow = 1)
{
WinHide, avc_control.ahk
KarShow = 0
}
}
return
StartWinAmp:
IfWinNotExist, %karaoke%
{
; Не нашли активного karaoke player'а
IfWinNotExist, ahk_class Winamp v1.x
{
; Не нашли активного KMPlayer'а
; Работаем с WinAmp'ом - запускаем проигрывание музыки
IfWinNotExist, ahk_class %winampid%
{
WinAmpWait := WinAmpWait + 1
If(WinAmpWait > 3)
{
; Не нашли активного WinAmp'а - запускаем
Run, %winamppath% /class=%winampid%,, Hide
WinAmpActive := 1
WinAmpWait := 0
WinWait, ahk_class %winampid%,, 5
}
}
Else
{
WinAmpWait := 0
}
IfWinExist, ahk_class %winampid%
{
SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
}
}
}
; Process, Exist, CamGrabber.exe
; If (ErrorLevel != 0)
; {
; CDSSendMessage("STOP", "CamGrabber") ; Пытаемся завершить процесс
; Sleep, 10000
; }
; Process, Exist, CamGrabber.exe
; If (ErrorLevel != 0)
; {
; RunWait, taskkill.exe /IM CamGrabber.exe /F,, Hide
; Sleep, 2000
; }
; Run, C:\CamGrabber31demo\CamGrabber.exe
Process, Exist, CamGrabber.exe
If (ErrorLevel = 0)
{
Run, C:\CamGrabber31demo\CamGrabber.exe
}
return
CheckWarnings:
; Обработчик варнингов
; CDSSendMessage("SAY1ashu", "CamGrabber") ; Обновляем подпись CamGrabber'а
CDSSendMessage("SETVAR;MYSAT;`%SatCount`%||SETVAR;MYALT;`%Alt`%||SETVAR;GPSDATE;`%GPSDate`%||SETVAR;GPSTIME;`%GPSTime`%", "ahk_class TCamGrabberSubTitles", WinExist("RoadRunner")) ; Просим CGSubTitles.exe отдать в RR число спутников и пр.
If WinAmpActive = 0
{
IfWinExist, ahk_class %winampid%
{
; WinAmp не был запущен, а сейчас найден в списке окон
WinAmpActive := 1
WinAmpWait := 0
Gosub StartWinAmp
}
Else
{
; WinAmp не был запущен, да и сейчас его что-то не видно
Gosub StartWinAmp
}
}
Else
{
IfWinNotExist, ahk_class %winampid%
{
WinAmpActive := 0
Gosub StartWinAmp
}
Else
{
If (Lastcheck + 20000 < A_TickCount)
{
; WinAmp был запущен и существует до сих пор, но
; давно не было проверок, возможно, работа останавливалась
SendToRR("SETVAR;OnlineStatus;" . offlinestr)
SetTimer, StartWinAmp, -3000
; наверняка было выключение, поэтому проверяем подключение к Инету
; инициируем новый цикл проверки Интернета через 1 секунду
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1
}
}
}
If CityGuideActive = 0
{
IfWinExist, %cityguide%
{
; CityGuide не был запущен, а сейчас найден в списке окон
; tmp := A_BatchLines
; SetBatchLines, -1
; WinActivate
; WinWaitActive
; Send, 5 ; включить GPS
; Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
; SetBatchLines, %tmp%
CityGuideActive := 1
}
}
Else
{
IfWinNotExist, %cityguide%
{
CityGuideActive := 0
}
}
If KMPActive = 0
{
IfWinExist, ahk_class Winamp v1.x
{
; KMPlayer не был запущен, а сейчас найден в списке окон
; понижаем приоритет СитиГида
Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
KMPActive := 1
}
}
Else
{
IfWinNotExist, ahk_class Winamp v1.x
{
Process, Priority, CityGuide.exe, Normal ; вернуть приоритет в normal - видео выключено
KMPActive := 0
}
}
If KaraokeActive = 0
{
IfWinExist, %karaoke%
{
; Нашли активный karaoke player - максимизируем окно
WinActivate
Send, !f
Send, {Space}
KaraokeActive := 1
SetTimer, ShowHideKaraoke, 1000 ; отслеживать показ на экране
}
}
Else
{
IfWinNotExist, %karaoke%
{
KaraokeActive := 0
SetTimer, ShowHideKaraoke, -1000 ; запустить в последний раз - чтобы скрыть окно
}
}
IfWinExist, %pstripwin1%
{
; Найдено стартовое окно 1 восстановления PowerStrip'а
WinActivate
Send, Д
}
IfWinExist, %pstripwin2%
{
; Найдено стартовое окно 2 восстановления PowerStrip'а
WinActivate
Send, Y
}
IfWinExist, %winamperror%
{
; Найдено окно WinAmp'а с ошибкой звукового устройства
; Вероятнее всего звуковая usb-карта не успела проинициализироваться
; закрываем окно с ошибкой и через 5 секунд пытаемся запустить PLAY
WinActivate
Send, {Enter}
SetTimer, StartWinAmp, -5000
}
IfWinExist, %svhostwin%
{
; Скидываем полученную ошибку приложения (вероятнее всего служба Windows Audio)
WinActivate
Send, {Esc}
; SetTimer, RestartAudio, -1000
}
IfWinExist, %kmperror%
{
; Скидываем полученную ошибку KMP
WinActivate
Send, {Enter}
RunWait, taskkill.exe /IM KMPlayer.exe /F,, Hide
Run, C:\Program Files\The KMPlayer\KMPlayer.exe
}
; IfWinExist, %camgrabbererror%
; {
; Нашли ошибку camgrabber'а - перезапускаем его
; WinActivate
; Send, {Enter}
; CDSSendMessage("STOP", "CamGrabber") ; Пытаемся завершить процесс мирным путём
; Sleep, 4000
; RunWait, taskkill.exe /IM CamGrabber.exe /F,, Hide
; Sleep, 2000
; Run, C:\CamGrabber31demo\CamGrabber.exe
; }
Lastcheck := A_TickCount
return
RestartAudio:
RunWait, net stop AudioSrv,, Hide
RunWait, net start AudioSrv,, Hide
return
CheckInternet:
; Обработчик интернет-проверок
oncheckonline := 1
If (setoffline = 1)
Gosub DoOffline
Gosub DoOnline
oncheckonline := 0
SetTimer, CheckInternet, %checkperiod%, -1
return ; конец процедуры CheckInternet
CheckJam:
; Получаем время файла пробок
FileGetTime, OutputVar, %myjamfile%
mhour := Substr(OutputVar, 9, 2)
mmin := Substr(OutputVar, 11, 2)
; Собираем текущую отметку времени (в минутах)
currconntimestamp := A_Min + A_Hour*60
lastjamtimestamp := mmin + mhour*60
If (currconntimestamp < lastjamtimestamp)
currconntimestamp := currconntimestamp + 24*60
; Получаем возраст файла пробок
jamtime := currconntimestamp - lastjamtimestamp
jamexpired := 0
If (currconntimestamp > lastjamtimestamp + jamgreen)
jamexpired := 1
If (currconntimestamp > lastjamtimestamp + jamred)
jamtime := empty
; тут надо нарисовать цветом возраст пробочного файла
If (jamexpired = 0)
{
; Делаем зеленым
SendToRR("SETVAR;MYJAMR||SETVAR;MYJAMG;" . jamtime)
}
Else
{
; Делаем красным
SendToRR("SETVAR;MYJAMG||SETVAR;MYJAMR;" . jamtime)
}
return ; конец процедуры CheckJam
killras:
Process, Exist, rasdial.exe
If (ErrorLevel != 0)
{
RunWait, taskkill.exe /IM rasdial.exe,, Hide
Process, Exist, rasdial.exe
If (ErrorLevel != 0)
{
RunWait, taskkill.exe /IM rasdial.exe,, Hide
Sleep, 5000
Process, Exist, rasdial.exe
If (ErrorLevel != 0)
{
RunWait, taskkill.exe /IM rasdial.exe /F,, Hide
}
}
Sleep, 5000
}
return
DoOffline:
If (online = 1)
SendToRR("SETVAR;OnlineSwitch;" . chkonline)
Else
SendToRR("SETVAR;OnlineSwitch")
setoffline := 0
; Gosub killras
RunWait, rasdial %myconnection% /DISCONNECT,, Hide
SendToRR("SETVAR;OnlineStatus;" . offlinestr)
return
DoOnline:
If (online = 1)
SendToRR("SETVAR;OnlineSwitch;" . chkonline)
Else
SendToRR("SETVAR;OnlineSwitch")
; If (jamexpired = 0)
; {
; ; пробки свежие - считаем, что с тырнетом всё в порядке
; SendToRR("SETVAR;OnlineStatus;" . onlinestr)
; return
; }
Loop, 5 ; предпринимаем 5 попыток подключиться
{
RunWait, ping -n 3 -f -w 4000 %pinghost1%,, UseErrorLevel|Hide
If (ErrorLevel = 0)
{
SendToRR("SETVAR;OnlineStatus;" . onlinestr)
Break
}
Else
{
If (online = 1)
Sleep, 5000
RunWait, ping -n 3 -f -w 4000 %pinghost2%,, UseErrorLevel|Hide
If (ErrorLevel = 0)
{
SendToRR("SETVAR;OnlineStatus;" . onlinestr)
Break
}
Else
{
SendToRR("SETVAR;OnlineStatus;" . offlinestr)
}
}
If (online = 1)
{
Gosub DoOffline
Sleep, 2000
If (A_Index > 4)
{
; 4 попытки подключиться прошли напрасно - принимаем радикальные меры
; Отключаем и снова подключаем адаптер bluetooth
Gosub killras
PostMessage, 0x111, 7049,,, ahk_class AfxWnd42 ; bluetooth off
Sleep, 4000
PostMessage, 0x111, 7048,,, ahk_class AfxWnd42 ; bluetooth on
Sleep, 8000
; RunWait, C:\Tools\usr.exe stop -n "%btapapter%",, Hide
; Sleep, 2000
; RunWait, C:\Tools\usr.exe return -n "%btadapter%",, Hide
}
RunWait, rasdial %myconnection%,, Hide
}
Else
{
Break
}
}
return
VideoMove:
onvideomove := 1
readyformove := 0
allsize := 0
allcount := 0
cursize := 0
curcount := 0
curvideodestfound := 0
if InStr(FileExist(videodest), "D")
{
curvideodest := videodest
curvideodestD := videodestD
curvideodestfound := 1
gpsdatadest := curvideodestD . ":\GpsData"
}
Else
{
if InStr(FileExist(videodest2), "D")
{
curvideodest := videodest2
curvideodestD := videodest2D
curvideodestfound := 2
gpsdatadest := curvideodestD . ":\GpsData"
}
}
If (curvideodestfound > 0)
{
DriveSpaceFree, destspace, %curvideodest%
Loop, %videosource%
{
allsize := allsize + A_LoopFileSizeKB
allcount := allcount + 1
}
needspace := round(allsize/1024 - destspace)+10
if(needspace > 0)
{
Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nНа USB-накопителе не хватает %needspace%Mb!`nПеренос видеофайлов не возможен!,,, Courier New
Sleep, 5000
Progress, Off
}
Else
{
readyformove := 1
}
}
Else
{
Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nUSB-накопитель не найден!`nПеренос видеофайлов не возможен!,,, Courier New
Sleep, 5000
Progress, Off
}
if(readyformove == 1)
{
Progress, B R0-%allsize% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%`r`n%a_space%, Перенос маршрутного видео, Перенос видеозаписей, Tahoma
copytime := A_TickCount
copyspeedtext := a_space
Loop, %videosource%
{
prometer := round(cursize * 100 / allsize)
Progress, %cursize%, %curcount% из %allcount%`n%prometer%`% объёма%copyspeedtext%
FileMove, %A_LoopFileLongPath%, %curvideodest%, 1
if ErrorLevel
{
Progress, B ZH0 W600 H120 CW000000 CB00F000 CT00D000 FM20 FS18 WM1000 WS700, `nОшибка переноса %A_LoopFileName%!`nПеренос видеофайлов не возможен!,,, Courier New
Sleep, 5000
Progress, Off
onvideomove := 0
return
}
cursize := cursize + A_LoopFileSizeKB
curcount := curcount + 1
curcopytime := (A_TickCount - copytime) / 1000
copyspeed := round((allsize - cursize) / (cursize / curcopytime))
If(curcount > 4)
{
copyspeedtext := ", осталось " copyspeed " сек"
}
}
Progress, %cursize%, %curcount% из %allcount%`n100`% объёма
FileCreateDir, %gpsdatadest%
allcount := 0
Loop, %gpsdatasource%
{
allcount := allcount + 1
}
Progress, Off
Progress, B R0-%allcount% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%`r`n%a_space%, Перенос gps-данных, Перенос gps-данных, Tahoma
cur := 0
Loop, %gpsdatasource%
{
Progress, %cur%, %cur% из %allcount%`n
FileCopy, %A_LoopFileLongPath%, %gpsdatadest%, 1
cur := cur + 1
}
Progress, %cur%, %cur% из %allcount%`n
RunWait, C:\Tools\usr.exe stop -d %curvideodestD%,, Hide
; Sleep, 3000
Progress, Off
}
onvideomove := 0
return
CreateGpsTitles:
allcount := 0
curcount := 0
Loop, %videosource%
{
If(!(A_LoopFileExt = "SRT"))
{
allcount := allcount + 1
}
}
Progress, B R0-%allcount% Y410 ZH50 ZX20 ZY10 W600 H190 CW000000 CB00F000 CT00D000 FM24 FS20 WM1000 WS700, 0`%`r`n0 of %allcount%, Создание субтитров к маршрутному видео, Создание субтитров, Tahoma
Loop, %videosource%
{
If(!(A_LoopFileExt = "SRT"))
{
Progress, %curcount%, %curcount% из %allcount%`n
RunWait, C:\CGSubTitles\CGSubTitles.exe %A_LoopFileLongPath%,, Hide
curcount := curcount + 1
}
}
Progress, %cursize%, %curcount% из %allcount%`n
Sleep, 1000
Progress, Off
return
OnCopyData(wparam, lparam)
{
; функция получения входящего сообщение WM_COPYDATA
; Сюда приходит вызов с полученным сообщением-командой от RR
local pStr
pStr := NumGet(lparam+8), len := NumGet(lparam+4)
RecvMessage := SubStr(DllCall("MulDiv", "Int", pStr, "Int",1, "Int",1, "str"),1,len)
If (RecvMessage = "switch") {
If (online = 1)
online := 0
Else
online := 1
} Else If (RecvMessage = "online") {
online := 1
} Else If (RecvMessage = "offline") {
online := 0
} Else If (RecvMessage = "videomove") {
If (onvideomove <> 1)
SetTimer, VideoMove, -1000, -1 ; инициируем перенос видеофайлов
} Else If(RecvMessage = "creategpstitles") {
SetTimer, CreateGpsTitles, -1000, -1 ; инициируем создание субтитров
} Else If(RecvMessage = "movecg") {
WinShow, %cityguide%
WinSet, Style, -0xC00000, %cityguide%
WinSet, Region,, %cityguide%
WinActivate, %cityguide%
WinMove, %cityguide%, , -803, -36, 804, 640
} Else If(RecvMessage = "moveigo") {
WinShow, iGO8
WinSet, Style, -0xC00000, iGO8
WinSet, Region,, iGO8
WinActivate, iGO8
WinMove, iGO8, , -760, 0, 720, 600
} Else If(RecvMessage = "movegisrx") {
WinShow, gisrx
WinSet, Style, -0xC00000, gisrx
WinSet, Region,, gisrx
WinActivate, gisrx
WinMove, gisrx, , -760, 0, 720, 600
}
If (online = 1)
{
setoffline := 0
SendToRR("SETVAR;OnlineSwitch;" . chkonline)
}
Else
{
setoffline := 1
SendToRR("SETVAR;OnlineSwitch")
}
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1 ; инициируем новый цикл проверки Интернета
return 1 ; подтверждаем успешный приём сообщения
}
; Функция отправки команды в RoadRunner
SendToRR(msg="")
{
CDSSendMessage(msg, "RoadRunner")
return
}
; Функция отправки команды методом WM_COPY
CDSSendMessage(msg, prg, hndl="")
{
len := StrLen(msg)
port := 1
VarSetCapacity(CopyDataStruct, 12, 0)
NumPut(port, CopyDataStruct, 0)
NumPut(len, CopyDataStruct, 4) ; тут именно len, а не len+1 как пишут в некоторых примерах
NumPut(&msg, CopyDataStruct, 8)
SendMessage, 0x4A, %hndl%, &CopyDataStruct,, %prg%
return
}
doSK:
; Если экранная клавиарура запущена, то управляем ею с помощью "горячей клавиши"
; Иначе - запускаем исполняемый файл
IfWinExist, ahk_class TFloatingWindowLangForm
{
Send, ^!k
}
Else
{
Run, "C:\Program Files\ComfortKeyboard\CKeyboard.exe"
}
return
; Далее - обычные реакции на хоткеи
^!+c::
Critical
KeyWait, c
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, ahk_class Winamp v1.x
{
; Нашли активный KMPlayer - управляем им
ControlSend, , !``
}
Else
{
Send, ^!5 ; AutoHide для указателя мышки
}
return
^!+b::
Critical
KeyWait, b
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, ahk_class vanBascoPlayerClass
{
; нашли активный караоке плейер - удаляем текущую песню с диска
WinGetTitle, KarTitle, ahk_class vanBascoPlayerClass
StringReplace, KarTitle, KarTitle, %kardel%, , All
FileDelete, c:\karaoke.mega\%KarTitle%.kar
WinActivate, %karaoke%
Send, ^n
}
Else
{
Send, {Click right} ; имитация правой кнопки мышки
}
return
; скриншот вс ж лучше делает shup ;)
;^!+a:: ; screenshot текущего экрана
; Critical
; KeyWait, a
; KeyWait, Shift
; KeyWait, Alt
; KeyWait, Control
; RunWait, nircmd savescreenshot C:\PrScr.png,, Hide
; FileGetTime, OutputVar, C:\PrScr.png, C
; FileMove C:\PrScr.png, C:\camera\ss_%OutputVar%.png
; return
^!+e:: ; Команда NEXT для WinAmp'а / KMPlayer'а / Kararoke
Critical
KeyWait, e
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, %karaoke%
{
; Нашли активный karaoke player
WinActivate
Send, ^n
}
Else
{
IfWinExist, ahk_class Winamp v1.x
{
; Нашли активный KMPlayer - управляем им
PostMessage, 0x111, 40048,,, ahk_class Winamp v1.x ; следующий трек
}
Else
{
PostMessage, 0x111, 40048,,, ahk_class RRWinamp ; следующий трек
}
}
return
^!+f:: ; Команда PREV для WinAmp'а / KMPlayer'а / Karaoke
Critical
KeyWait, f
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, %karaoke%
{
; Нашли активный karaoke player
WinActivate
Send, ^p
}
Else
{
IfWinExist, ahk_class Winamp v1.x
{
; Нашли активный KMPlayer - управляем им
PostMessage, 0x111, 40044,,, ahk_class Winamp v1.x ; предыдущий трек
}
Else
{
PostMessage, 0x111, 40044,,, ahk_class RRWinamp ; предыдущий трек
}
}
return
^!+h:: ; Команда PLAY/PAUSE для WinAmp'а / KMPlayer'а / Karaoke
Critical
KeyWait, h
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, %karaoke%
{
; Нашли активный karaoke player
WinActivate
Send, {Space}
}
Else
{
IfWinExist, ahk_class Winamp v1.x
{
; Нашли активный KMPlayer - управляем им
; DoubleClick в окно проигрывателя - Play|Pause
WinActivate
Send, {Space}
; 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 ; поставить на паузу
}
Else
{
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'а день/ночь
Critical
KeyWait, i
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
if(!day)
{
Send, ^!1
day := 1
}
else
{
Send, ^!2
day := 0
}
return
^!+k:: ; Показывать или не показывать экранную клавиатуру
Critical
KeyWait, k
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
Process, Exist, RoadRunner.exe
If (ErrorLevel != 0)
{
; Если запущен RR, то клавиатура нам нужна только для Fennec'а
IfWinActive, Fennec
{
Gosub doSK
}
}
Else
{
Gosub doSK
}
return