ashu !
Вот такая ошибка, что делать, что удалить ?
http://dump.ru/viewer/1347935/
Вид для печати
ashu !
Вот такая ошибка, что делать, что удалить ?
http://dump.ru/viewer/1347935/
Посмотри обсуждение в этой ветке с сообщения #27.Цитата:
Сообщение от dima007
Цитата:
Сообщение от Parador
Задаю в поиске, находит, удаляю и все равно вылезает таблица:(
Я еще только приступаю к изучению AHK - поэтому, если что-то не так скажу, Ашу меня поправит:) Эта ошибка вылезает по след. причине: запускается скрипт (файл, иначе говоря), с названием "Autohotkey.ahk". Вопрос к тебе - когда возникает эта ошибка - при запуске программы Autohotkey, или при загрузке Windows, при запуске файла, или еще когда? Если при загрузке Windows, то нужно искать этот файл в папке автозагрузки (и соответственно, тереть его оттуда). Или ты сам запускаешь файл Autohotkey.ahk и тебе непонятно, почему он жалуется на инвалид хоткей - так это из-за горячей клавиши z - если в системе установлен по умолчанию русский язык, то латинские горячие клавиши работать не будут.Цитата:
Сообщение от dima007
Вылезает при запуске программы Autohotkey, а как еще проверить что она работает? Так и что надо горячую клавише поменять?
Дошел до #29 поста и все дальше не знаю чего делать.
После установки я программу не запускал. Зачем? Она прописалась, и этого для запуска нужных тебе скриптов ДОСТАТОЧНО. Сейчас попробовал запустить исп. файл Autohotkey, и программа выдала запрос: "To help you get started, would you like to create a sample script in the My Documents folder? Press YES to create and display the sample script. Press NO to exit." Видимо, ты подтвердил создание sample-скрипта Autohotkey.ahk, т.е., примера. Теперь ищи его в папке Мои документы ну и удаляй его, если он тебе не нужен:cool: . Ну или для разминки возьми и поменяй в этом скрипте #z на #я (гор. клавиши win+z сменятся на win+я), и скрипт запустится без ошибкиЦитата:
Сообщение от dima007
Ну или для разминки возьми и поменяй в этом скрипте #z на #я (гор. клавиши win+z сменятся на win+я), и скрипт запустится без ошибки
Так оно и есть и еще поправил в avc_control.ahk
^!+с::^!5 ; AutoHide для указателя мышки
^!+и::Click right ; имитация правой кнопки мышки
^!+ф:: ; screenshot текущего экрана
RunWait, nircmd savescreenshot C:\PrScr.png,, Hide
FileGetTime, OutputVar, C:\PrScr.png, C
FileMove C:\PrScr.png, C:\Scrns\ss_%OutputVar%.png
return
^!+у:: ; Команда NEXT для WinAmp'а
PostMessage, 0x111, 40048,,, ahk_class RRWinamp ; следующий трек
return
^!+а:: ; Команда PREV для WinAmp'а
PostMessage, 0x111, 40044,,, ahk_class RRWinamp ; предыдущий трек
return
^!+р:: ; Команда PLAY/PAUSE для WinAmp'а
SendMessage, 0x400,, 104,, ahk_class RRWinamp ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class RRWinamp ; включить воспроизведение
Else ; если воспроизводится, то...
PostMessage, 0x111, 40046,,, ahk_class RRWinamp ; поставить на паузу
return
^!+ш:: ; Переключатель профилей PowerStrip'а день/ночь
if(!day)
{
Send, ^!1
day := 1
}
else
{
Send, ^!2
day := 0
}
return
Только вот обновления пробок не хочет делать, нет подключения к сети , пишет НЕТ, хотя вроде все выставил
inampid := "RRWinamp" ; идентификатор класса окна винампа
cityguide := "City Guide" ; название окна CityGuide
myconnection := "Скайлинк" ; название подключения к Инету
btadapter := "GSR Bluetooth Device" ; название адаптера bluetooth
pinghost1 := "www.relcom.ru" ; кого мучаем пингами в первую очередь (www.relcom.ru)
pinghost2 := "www.ru" ; кого мучаем пингами во вторую очередь (www.ru)
onlinestr := "В сети" ; сообщение "Online" на экране (переменная RR OnlineStatus)
offlinestr := "---" ; сообщение "Offline" на экране
chkonline := "+ +" ; сообщение "постоянное подключение" на экране
pstripwin := "Меры предосторожности" ; название стартового окна восстановления PowerStrip'а
svhostwin := "svchost.exe - Ошибка приложения" ; название окна ошибки службы (вероятнее всего служба Windows Audio)
winamperror := "NullSoft DirectSound output" ; название окна винампа с ошибкой звукового устройства
checkperiod := 40 ; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
myjamfile := "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
;myjamfile := "C:\CityGuide\City Guide 2.2\78SPb.jam" ; за каким файлом пробок следим (тестовый)
jamgreen := 8 ; до скольки минут считать возраст пробок зеленым
jamred := 40 ; до скольки минут считать возраст пробок красным
empty := "нет" ; что пишем на экране, если пробочный файл очень старый
Вот! Уже на верном пути:)Цитата:
Сообщение от dima007
А здесь я не помощник - это Ashu нужно пытать:D У меня Роад Раннер не установлен. Для начала я бы посоветовал попытаться настроить СитиГид со скриптом cityguide-is.ahk из 17 поста (при этом Ситигид запускать как самостоятельную прогу, без оболочки РР). Если получится, то будешь копать дальше. У меня он заработал практически сразу, я только путь "myjamfile" подправил под свой.Цитата:
Сообщение от dima007
Запусти из командной строки:Цитата:
Сообщение от dima007
rasdial "Скайлинк"
Работает?
ashu !
Вот что пишет
http://217.106.233.190/viewer/preview/biggest/1356452/
Allex
Теперь и без оболочки не хочет обновляться
Проверяй настройки подключения - там у тебя проблема.Цитата:
Сообщение от dima007
Ну вроде запустил обновление, в разделе помощь-информация есть данные о обновлении и пробки показывает, а на экране "нет" горит и на кнопке "в сети" и "нет" ничего не понимаю..........
в разделе "редактируемые переменные - настройки" все ОК?Цитата:
Сообщение от dima007
Проверь действительно ли у тебя существует файлЦитата:
Сообщение от dima007
C:\Program Files\City Guide\78SPb.jam
или пробки пишутся всё ж в какое-то другое место.
Если путь к jam-файлу указал правильно, то должно работать...
Если путь указан верно, но не работает, попробуй мою текущую версию avc_control.ahk:
KeyWait'ы добавлены для устранения проблем с разными способами софтверных имитации нажатий клавиш.Код:#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 := "+ +" ; сообщение "постоянное подключение" на экране
pstripwin := "Меры предосторожности" ; название стартового окна восстановления PowerStrip'а
svhostwin := "svchost.exe - Ошибка приложения" ; название окна ошибки службы (вероятнее всего служба Windows Audio)
winamperror := "NullSoft DirectSound output" ; название окна винампа с ошибкой звукового устройства
checkperiod := 30 ; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
myjamfile := "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
;myjamfile := "C:\CityGuide\City Guide 2.2\78SPb.jam" ; за каким файлом пробок следим (тестовый)
jamgreen := 8 ; до скольки минут считать возраст пробок зеленым
jamred := 50 ; до скольки минут считать возраст пробок красным
empty := "нет" ; что пишем на экране, если пробочный файл очень старый
; -------- конец редактируемых переменных - настроек ----------
WinAmpActive := 0
CityGuideActive := 0
day := 1
online := 0
setoffline := 0
oncheckonline := 0
Lastcheck := 0
checkperiod := - checkperiod * 1000
jamexpired := 1
; Создаем пустое окно и сразу его прячем. Окно необходимо для получения команд управления от RR
Gui, Show
Sleep, 5000
WinWait, avc_control.ahk
WinHide
; Устанавливаем обработчик для приёма команд через WM_COPYDATA от RR
OnMessage(0x4A, "OnCopyData")
SetTimer, CheckWarnings, 2000
SetTimer, CheckJam, 30000
SetTimer, CheckInternet, %checkperiod%, -1 ; периодическая проверка подключения к Интернету (с пониженным приоритетом)
return
StartWinAmp:
SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
; наверняка было выключение, поэтому проверяем подключение к Инету
; инициируем новый цикл проверки Интернета через 1 секунду
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1
return
CheckWarnings:
; Обработчик варнингов
If WinAmpActive = 0
{
IfWinExist, ahk_class %winampid%
{
; WinAmp не был запущен, а сейчас найден в списке окон
Gosub StartWinAmp
WinAmpActive := 1
}
}
Else
{
IfWinNotExist, ahk_class %winampid%
{
WinAmpActive := 0
}
Else
{
If (Lastcheck + 20000 < A_TickCount)
{
; WinAmp был запущен и существует до сих пор, но
; давно не было проверок, возможно, работа останавливалась
SetTimer, StartWinAmp, -5000
}
}
}
If CityGuideActive = 0
{
IfWinExist, %cityguide%
{
; CityGuide не был запущен, а сейчас найден в списке окон
WinActivate
Send, 5 ; включить GPS
CityGuideActive := 1
}
}
Else
{
IfWinNotExist, %cityguide%
{
CityGuideActive := 0
}
}
IfWinExist, %pstripwin%
{
; Найдено стартовое окно восстановления PowerStrip'а
WinActivate
Send, Д
}
IfWinExist, %winamperror%
{
; Найдено окно WinAmp'а с ошибкой звукового устройства
; Вероятнее всего звуковая usb-карта не успела проинициализироваться
; закрываем окно с ошибкой и через 5 секунд пытаемся запустить PLAY
WinActivate
Send, {Enter}
SetTimer, StartWinAmp, -5000
}
IfWinExist, %svhostwin%
{
; Скидываем полученную ошибку приложения (вероятнее всего служба Windows Audio)
WinActivate
Send, {Esc}
; SetTimer, RestartAudio, -1000
}
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
DoOffline:
If (online = 1)
SendToRR("SETVAR;OnlineSwitch;" . chkonline)
Else
SendToRR("SETVAR;OnlineSwitch")
setoffline := 0
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 2000 %pinghost1%,, UseErrorLevel|Hide
If (ErrorLevel = 0)
{
SendToRR("SETVAR;OnlineStatus;" . onlinestr)
Break
}
Else
{
If (online = 1)
Sleep, 5000
RunWait, ping -n 3 -f -w 2000 %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
RunWait, C:\Tools\usr.exe stop -n "%btapapter%",, Hide
RunWait, C:\Tools\usr.exe return -n "%btadapter%",, Hide
Sleep, 5000 ; даём системе прийти в себя после такого надругательства
}
RunWait, rasdial %myconnection%,, Hide
}
Else
{
Break
}
}
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
online := 0
}
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="")
{
len := StrLen(msg)
port := 1 ; RR слушает команды, приходящие на порт 1
VarSetCapacity(CopyDataStruct, 12, 0)
NumPut(port, CopyDataStruct, 0)
NumPut(len, CopyDataStruct, 4) ; тут именно len, а не len+1 как пишут в некоторых примерах
NumPut(&msg, CopyDataStruct, 8)
SendMessage, 0x4A,, &CopyDataStruct,, RoadRunner
}
; Далее - обычные реакции на хоткеи
^!+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
Send, {Click right} ; имитация правой кнопки мышки
return
^!+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:\Scrns\ss_%OutputVar%.png
return
^!+e:: ; Команда NEXT для WinAmp'а / KMPlayer'а
Critical
KeyWait, e
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
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'а
Critical
KeyWait, f
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
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'а
Critical
KeyWait, h
KeyWait, Shift
KeyWait, Alt
KeyWait, Control
IfWinExist, ahk_class Winamp v1.x
{
; Нашли активный KMPlayer - управляем им
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
Пробки обновляются, на главном виде Road Runner наверху надпись "в сети" открываб сити гай на экране в правом верхнем углу "нет" горит и не убирается никак, а на кнопке тоже горит "в сети" и "нет" , но это еще что, если выйти из Road Runner и открыв Internet Explorer в одной из вкладки зайти на сайт сити гай, то в правом углу тоже выскочит "нет", а в панели задач CGJAM.
Я думаю наверное какие то детские ошибки, нестаит где нибудь чего нибудь, а на большом комп. тоже самое плюс пробки обновляет но не показывает.
Ну, ты намешал...Цитата:
Сообщение от dima007
Судя по всему, ты запустил сразу оба скрипта - и avc_control.ahk, и cityguide-is.ahk :)
В принципе, ничего плохого в этом нет. Но раз оба пишут "НЕТ", значит ты в обоих неправильно указал путь к jam-файлу (78SPb.jam).
Как вариант - системное время на компе у тебя стоит неправильное.
А, что надо по одному запускать, я по обоим щелкаю
Ну вроде доходит,
-avc_control.ahk это для Road Runner
-ahk, и cityguide- это когда просто программу одну запускаешь, правельно?
Пишет в "сети 4"-5 меняет значения, я понял это красные пробки, а других нету и еще прием GPS 4 палки, а Sаt:0, так и должно быть?
Спасибо все пошло.
Поздравляю! Добил таки, не отступил!:)Цитата:
Сообщение от dima007
С вашей помощью:)
Последняя версия, с которой сейчас езжу ;)
avc_control.ahk:
Код:#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 := "+ +" ; сообщение "постоянное подключение" на экране
pstripwin := "Меры предосторожности" ; название стартового окна восстановления PowerStrip'а
svhostwin := "svchost.exe - Ошибка приложения" ; название окна ошибки службы (вероятнее всего служба Windows Audio)
winamperror := "NullSoft DirectSound output" ; название окна винампа с ошибкой звукового устройства
checkperiod := 30 ; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
myjamfile := "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
;myjamfile := "C:\CityGuide\City Guide 2.2\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'а
; -------- конец редактируемых переменных - настроек ----------
WinAmpActive := 0
KaraokeActive := 0
CityGuideActive := 0
day := 1
online := 0
setoffline := 0
oncheckonline := 0
Lastcheck := 0
checkperiod := - checkperiod * 1000
jamexpired := 1
; Создаем пустое окно и сразу его прячем. Окно необходимо для получения команд управления от RR
Gui, Show
WinWait, avc_control.ahk
;WinSet, ExStyle, ^0x80
WinHide, avc_control.ahk
; Устанавливаем обработчик для приёма команд через WM_COPYDATA от RR
OnMessage(0x4A, "OnCopyData")
SetTimer, CheckWarnings, 2000
SetTimer, CheckJam, 30000
SetTimer, CheckInternet, %checkperiod%, -1 ; периодическая проверка подключения к Интернету (с пониженным приоритетом)
return
StartWinAmp:
IfWinNotExist, %karaoke%
{
; Не нашли активного karaoke player'а
IfWinNotExist, ahk_class Winamp v1.x
{
; Не нашли активного KMPlayer'а
; Работаем с WinAmp'ом - запускаем проигрывание музыки
SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
}
}
; наверняка было выключение, поэтому проверяем подключение к Инету
; инициируем новый цикл проверки Интернета через 1 секунду
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1
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:\CamGrabber30demorc2\CamGrabber.exe
return
CheckWarnings:
; Обработчик варнингов
If WinAmpActive = 0
{
IfWinExist, ahk_class %winampid%
{
; WinAmp не был запущен, а сейчас найден в списке окон
Gosub StartWinAmp
WinAmpActive := 1
}
}
Else
{
IfWinNotExist, ahk_class %winampid%
{
WinAmpActive := 0
}
Else
{
If (Lastcheck + 20000 < A_TickCount)
{
; WinAmp был запущен и существует до сих пор, но
; давно не было проверок, возможно, работа останавливалась
SendToRR("SETVAR;OnlineStatus;" . offlinestr)
SetTimer, StartWinAmp, -5000
}
}
}
If CityGuideActive = 0
{
IfWinExist, %cityguide%
{
; CityGuide не был запущен, а сейчас найден в списке окон
WinActivate
Send, 5 ; включить GPS
Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
CityGuideActive := 1
}
}
Else
{
IfWinNotExist, %cityguide%
{
CityGuideActive := 0
}
}
If KaraokeActive = 0
{
IfWinExist, %karaoke%
{
; Нашли активный karaoke player - максимизируем окно
WinActivate
Send, !f
Send, {Space}
KaraokeActive := 1
}
}
Else
{
IfWinNotExist, %karaoke%
{
KaraokeActive := 0
}
}
IfWinExist, %pstripwin%
{
; Найдено стартовое окно восстановления PowerStrip'а
WinActivate
Send, Д
}
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:\CamGrabber30demorc2\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:
WinHide, avc_control.ahk
; на всяк случай снова прячем окно - бывает, что
; после перезагрузки окно с первой попытки почему-то не прячется
; Получаем время файла пробок
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 /F,, 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
RunWait, C:\Tools\usr.exe stop -n "%btapapter%",, Hide
Sleep, 2000
RunWait, C:\Tools\usr.exe return -n "%btadapter%",, Hide
Sleep, 5000 ; даём системе прийти в себя после такого надругательства
}
RunWait, rasdial %myconnection%,, Hide
}
Else
{
Break
}
}
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
online := 0
}
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)
{
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,, &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
Send, {Click right} ; имитация правой кнопки мышки
return
^!+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:\Scrns\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 - управляем им
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
Поставил себе в карписю караоке от vanbasco... Всё хорошо, но уж очень мелким шрифтом пишется на экране название текущего kar-файла. Возня с настройками, реестром, ресурсами и даже письмом автору ничего не дали...
Выход был найден - autohotkey! :D
Скриптец максимизирует окно караоке при запуске, посылает в него {Space} для старта проигрывания и показывает в верхней части экрана название текущей песни.
karaoke.ahk:
Код:#NoTrayIcon ; не отображать значок скрипта в трее
#SingleInstance force ; перезагрузить скрипт, если он уже запущен
DetectHiddenWindows, On ; искать в скрытых окнах
#NoEnv ; запрещаем имена переменных как у переменных окружения
SendMode Input ; ускорренный ввод
#Persistent ; держать скрипт запущенным
SetTitleMatchMode 2 ; 2 - заголовок окна должен содержать значение, заданное в параметре
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, karaoke.ahk ; окно караоке находится на втором мониторе (с координатами -800,0)
KarShow := 0
WinHide, karaoke.ahk
KaraokeActive := 0
karaoke := "vanBasco's Karaoke Player" ; название окна karaoke player'а
kardel := ".kar - vanBasco's Karaoke Player" ; что не надо выводить в названии песни
SetTimer, CheckWarnings, 2000
return
ShowHideKaraoke:
IfWinExist, ahk_class vanBascoPlayerClass
{
If (KarShow <> 1)
{
WinShow, karaoke.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, karaoke.ahk
KarShow = 0
}
}
return
CheckWarnings:
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 ; запустить в последний раз - чтобы скрыть окно
}
}
return
Понятное дело, я это сделал не отдельным скриптом, а в составе моего скрипта обслуживания avc_control.ahk:
Код:#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 := "+ +" ; сообщение "постоянное подключение" на экране
pstripwin := "Меры предосторожности" ; название стартового окна восстановления PowerStrip'а
svhostwin := "svchost.exe - Ошибка приложения" ; название окна ошибки службы (вероятнее всего служба Windows Audio)
winamperror := "NullSoft DirectSound output" ; название окна винампа с ошибкой звукового устройства
checkperiod := 30 ; через сколько секунд (примерно) запускаем процедуру проверки сети и пробок СитиГида
myjamfile := "C:\Program Files\City Guide\78SPb.jam" ; за каким файлом пробок следим (боевой)
;myjamfile := "C:\CityGuide\City Guide 2.2\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" ; что не надо выводить в названии песни
; -------- конец редактируемых переменных - настроек ----------
WinAmpActive := 0
KaraokeActive := 0
CityGuideActive := 0
day := 1
online := 0
setoffline := 0
oncheckonline := 0
Lastcheck := 0
checkperiod := - checkperiod * 1000
jamexpired := 1
karprev := ""
; Окно для получения команд управления от 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'ом - запускаем проигрывание музыки
SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
}
}
; наверняка было выключение, поэтому проверяем подключение к Инету
; инициируем новый цикл проверки Интернета через 1 секунду
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1
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:\CamGrabber30demorc2\CamGrabber.exe
return
CheckWarnings:
; Обработчик варнингов
If WinAmpActive = 0
{
IfWinExist, ahk_class %winampid%
{
; WinAmp не был запущен, а сейчас найден в списке окон
Gosub StartWinAmp
WinAmpActive := 1
}
}
Else
{
IfWinNotExist, ahk_class %winampid%
{
WinAmpActive := 0
}
Else
{
If (Lastcheck + 20000 < A_TickCount)
{
; WinAmp был запущен и существует до сих пор, но
; давно не было проверок, возможно, работа останавливалась
SendToRR("SETVAR;OnlineStatus;" . offlinestr)
SetTimer, StartWinAmp, -5000
}
}
}
If CityGuideActive = 0
{
IfWinExist, %cityguide%
{
; CityGuide не был запущен, а сейчас найден в списке окон
WinActivate
Send, 5 ; включить GPS
Process, Priority, CityGuide.exe, BelowNormal ; понизить приоритет чтобы не мешал просмотру видео
CityGuideActive := 1
}
}
Else
{
IfWinNotExist, %cityguide%
{
CityGuideActive := 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, %pstripwin%
{
; Найдено стартовое окно восстановления PowerStrip'а
WinActivate
Send, Д
}
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:\CamGrabber30demorc2\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:
;WinHide, avc_control.ahk
; на всяк случай снова прячем окно - бывает, что
; после перезагрузки окно с первой попытки почему-то не прячется
; Получаем время файла пробок
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 /F,, 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
RunWait, C:\Tools\usr.exe stop -n "%btapapter%",, Hide
Sleep, 2000
RunWait, C:\Tools\usr.exe return -n "%btadapter%",, Hide
Sleep, 5000 ; даём системе прийти в себя после такого надругательства
}
RunWait, rasdial %myconnection%,, Hide
}
Else
{
Break
}
}
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
online := 0
}
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)
{
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,, &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
Send, {Click right} ; имитация правой кнопки мышки
return
^!+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:\Scrns\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
Если надо часто совершать какие-то единообразные операции копирования иль перемещения файлов (например, сгружать на флешку снятое CamGrabber'ом видео с маршрутной камеры иль заливать новые музыкальные или видеофайлы), то можно этот процесс слегка автоматизировать при помощи того же autohotkey.
http://compcar.ru/forum/attachment.p...8&d=1236545339
Пример для встраивания в ваш скрипт:
Процедура VideoMove из данного примера производит перенос файлов по маске C:\camera\*.* на флешку в каталог G:\camera. Если такого каталога обнаружить не удалось, производится попытка произвести перенос файлов в альтернативный каталог F:\camera. Если и такого каталога не найдено, выдается предупреждение и работа завершается.Код:videosource := "C:\camera\*.*" ; маска видеофайлов для переноса на usb-накопитель
videodest := "G:\camera" ; путь, куда надо переносить видеофайлы
отключения из системы
videodest2 := "F:\camera" ; альтернативный путь, куда надо переносить видеофайлы
onvideomove := 0
VideoMove:
onvideomove := 1
readyformove := 0
allsize := 0
allcount := 0
cursize := 0
curcount := 0
curvideodestfound := 0
if InStr(FileExist(videodest), "D")
{
curvideodest := videodest
curvideodestfound := 1
}
Else
{
if InStr(FileExist(videodest2), "D")
{
curvideodest := videodest2
curvideodestfound := 2
}
}
If (curvideodestfound > 0)
{
DriveSpaceFree, destspace, %curvideodest%
Loop, %videosource%
{
allsize := allsize + A_LoopFileSizeKB
allcount := allcount + 1
}
needspace := round(allsize/1024 - destspace)+1
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% 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% of %allcount%`n%prometer%`% объёма%copyspeedtext%
cursize := cursize + A_LoopFileSizeKB
curcount := curcount + 1
curcopytime := (A_TickCount - copytime) / 1000
copyspeed := round((allsize - cursize) / (cursize / curcopytime))
copyspeedtext := ", осталось " copyspeed " сек"
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, 15000
Progress, Off
onvideomove := 0
return
}
}
Progress, %cursize%, %curcount% of %allcount%`n100`% объёма
Sleep, 3000
Progress, Off
}
onvideomove := 0
return
Если каталог назначения найден, рисуется progress процесса переноса.
Процедуру можно вызывать по удобному вам событию - по нажатию горячей клавиши, по таймеру, по сообщению, посланному через WM_COPY, иль каким-нибудь другим образом.
Я в своём скрипте avc_control.ahk сделал вызов по нажатию кнопки в скине RR - посылаю команду SENDMSG;avc_control.ahk;videomove, а по завершению переноса файлов принудительно отключаю флешку командой usr.exe stop -d буква_диска_флешки:
Код:#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
2 ashu
Трабл вот в чем - функциональность полного варианта для меня избыточна. Реальная потребность в - пробочной инфе, индикации подключения к нету, копировании файлов CG на съемный носитель (и отключении съемного носителя нажатием на кнопку скина).
Несмотря на подробные комментарии, дилетанту корректно поправить скрипт довольно трудно. Как пример, кусок кода:
Вроде, понятно - караоке. Движемся дальше :PHP код:
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
Ну, вроде бы выясняем "что это было?!" - караоке ли, просто ли винамп и чего делать дальше...PHP код:
StartWinAmp:
IfWinNotExist, %karaoke%
{
; Не нашли активного karaoke player'а
IfWinNotExist, ahk_class Winamp v1.x
{
; Не нашли активного KMPlayer'а
; Работаем с WinAmpом - запускаем проигрывание музыки
SendMessage, 0x400,, 104,, ahk_class %winampid% ; проверка воспроизведения
If ErrorLevel = 0 ; если не воспроизводится, то...
PostMessage, 0x111, 40045,,, ahk_class %winampid% ; включить воспроизведение
}
}
Однако ж следом безо всякого китайского предупреждения -
При чем там интернет, при чем CamGrabber?.. (кстати, у меня нет даже уверенности, что разбиение на смысловые блоки я здесь правильно сделал, не говоря уже о синтаксисе...)PHP код:
; наверняка было выключение, поэтому проверяем подключение к Инету
; инициируем новый цикл проверки Интернета через 1 секунду
If (oncheckonline <> 1)
SetTimer, CheckInternet, -1000, -1
Process, Exist, CamGrabber.exe
If (ErrorLevel != 0)
{
CDSSendMessage("STOP", "CamGrabber") ; Пытаемся завершить процесс
Sleep, 10000
}
М.б. есть смысл соорудить набор из элементарных скриптов, каждый из которых отвечает за отдельную задачу - тогда и автора не станут теребить каждый раз тюнингом под индивидуальные задачи, да и ламерам в этом вопросе проще будет освоить процесс подгонки?
Впрочем и ликбез в этой теме тоже будет безусловно, полезен многим...
Ты привёл в пример старый код скрипта. Сейчас он слегка изменен - последняя версия в посте №65 (и периодически меняется ;)).
:)
Угу. Процедура StartWinAmp запускается в-основном при первом запуске скрипта, при выходе из сна и если в списке процессов не обнаружен WinAmp. Как бы заодно туда была добавлен вызов проверки подключения к Инету и перезапуск CamGrabber'а (сейчас уже неактуально - CamGrabber последней версии работает стабильно и при выходе из сна не требует перезапуска. Но код не удалил, а закомментировал - фиг знает как он себя будет вести в будущих версиях ;)).
2 ashu
Цитата:
Но код не удалил, а закомментировал
А последние строчки? Выделенное-то зачем? В закомментированных понятно хоть проверяется самочувствие объекта и производится его перезапуск... А тут вдруг "Run, C:\CamGrabber31demo..."PHP код:
; 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)
{
[B]Run, C:\CamGrabber31demo\CamGrabber.exe[/B]
}
return
Ну, впрочем, ход мысли понятен, а вот такой еще вопрос: периодически в разных местах скрипта проверяется состояние винампа. Насколько я понимаю, скрипт крутится постоянно циклом, т.е. одной проверки вроде бы достаточно... Другое дело, что она может быть нужна для работы следующего за ней кода, но если период полного цикла не слишком велик, м.б... А главное, в РР винамп является чем-то вроде движка (если я правильно понимаю), и его падение - это падение всего фронт-энда? Силюсь вспомнить прецеденты...
Там проверяется есть ли такой процесс в памяти (camgrabber.exe) и, если нет, то запуск.
Отсутствие винампа не вызывает падения RR. У меня для экономии ресурсов сделано так - если запускается KMPlayer или караоке-плейер, то винамп не останавливается, а вообще выгружается. А по завершению работы KMP или караоке ahk-скрипт заново стартует винамп.
Что до горячих клавиш, то там проверяется какие из плейеров запущены и производится управление более приоритетным.
А вообще, т.к. скрипт постоянно правится, то некоторое количество мусора в коде, конечно, присутствует. ;)
2 ashu
Сенкс, стало понятнее...
Тогда еще один вопрос ламера - такая громоздкая конструкция скрипта, в которой собрано все, обусловлена какими-то фундаментальными причинами? И с другой стороны - написание отдельных узкоспециализированных скриптов чему-то противоречит?
Я понимаю, что есть процессы взаимосвязанные (тот же пример с караоке/винампом/КМР), но пробочную инфу развязать с КГ наверное можно безболезненно, как и копирование файлов с наличием интернета?
М.б. я чего-то не догоняю, но кажется логичнее сделать несколько функциональных блоков (пробки+интернет, КГ+копирование файлов+ отстрел флешки, получение субтитров от GPS/OBD, принудительное завершение прог при уходе в спячку+запуск потерянного после нее)...
Оттачивать их по отдельности, чистить код в этом случае не проще?
Да, конечно, проще. Только лень всё переделывать ;)
Скрипт же писался не сразу целиком, а от мелкого - только реакции на хоткеи, - постепенно обрастая дополнительным функционалом. Но разбивать его на отдельные скрипты смысла не имеет - каждый отдельный скрипт будет запускать по отдельному экземпляру autohotkey.exe, что в свете борьбы за экономию ресурсов не очень хорошо.
2 ashu
Да, это более чем серьезный аргумент...Цитата:
каждый отдельный скрипт будет запускать по отдельному экземпляру autohotkey.exe, что в свете борьбы за экономию ресурсов не очень хорошо.
Тогда вот какой вопрос: предположим, я цепляю его к своей системе без модификаций. Учитывая то, что половины того, что в нем заложено (PowerStrip, KMPlayer, vanBasco's...) у меня нет - насколько предсказуемо он себя поведет?
2 ashu
Хм, будем надеяться, что мой вопрос был не из разряда "А можно с этим зонтиком прыгнуть с 10 этажа?". А то твой ответ приобретет совершенно иной оттенок ;)
Ок, попробую! Жаль только, что на моей вновь собираемой системе нет пока КГ...
2 ashu
Да нет, конечно - и домашняя машина у меня - полигон для экспериментов, а сейчас еще вдобавок новый комп (карпися) собирается, взамен тому, с которым езжу ;).
Вот его-то и набиваю сейчас по самое не балуйся ;) Хочется все отладить, пока он на столе - в машине уже проблематичней.
http://photofile.ru/photo/dytljhju/9.../106295636.jpg
Ну, это в общем-то понятно: Дазлл в машине, КГ не стоит :D
Оценить все остальное трудно - по горячности забыл поправить часть, относящуюся к пробкам, поэтому возраст их не увидел, но полагаю, что должно работать - в облегченном варианте работало...
Индикации наличия нета не увидел, хотя подключение было - полагаю, что дело опять же в том, что для связи использую SkyLink`ский USB C-Montech - стало быть, и здесь надо скрипт переписывать...
Поправил те части, что отвечают за пробки/интернет - толку ноль...
При загрузке скрипт ругается на отстутствие хот-кеев, возраст пробочного файла не пишет, индикации наличия нета (как и вообще какой-либо индикации) тоже нет...
Будем думать...
Если ты удалил те части, что отвечают за обработку хоткеев, так, что ни какой реакции на хоткеи не предусмотрено, то надо в начале скрипта добавить строчку:
#Persistent
Индикация возраста пробочного файла производится через RR - проверь, что в скине RR у тебя используются требуемые переменные.
Я вообще ничего не удалял, максимум - комментировал ;) Нет, в этой части не трогал вообще ничего...Цитата:
Если ты удалил те части, что отвечают за обработку хоткеев,
Вот уж в скине у меня точно ничего еще не предусмотрено на этот счет, а надо? Ну, в том смысле, что без фронта скрипт же выводит соответствующую мессагу в окне проги - я полагал, что и под фронтом оно работает примерно так же. В отличии от копирования файлов КГ - вот там, судя по скриншоту, без доработки скина не обошлось...Цитата:
проверь, что в скине RR у тебя используются требуемые переменные
Если можно - чуть поподробнее: что за требуемые переменные. где именно они должны использоваться?
И уж до кучи: C:\Tools\usr.exe - это что?
Ээээ... Не-а. :)
Скрипт выводит всю инфу через скин RR. Но специально для Parador'а был сделан отельный скрипт cityguide-is.ahk, который работает без RR и выводит возраст пробочного файла поверх окна СитиГида.
А для копирования файлов нужна доработка скина только в виде добавления кнопки вызова процедуры копирования.