![]() |
|
|
#31 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Ahk-скрипт переписал.
Скрипт к предыдущему функционалу получил теперь умения: - поддерживать интернет-соединение - показывать "возраст" файла пробок СитиГида - СитиГид запускается сразу с включенным GPS - нормальная обработка ошибок подключения к Интернету - нормальная обработка ошибки WinAmp'а из-за долгой инициализации звуковой usb-карты В скине РоадРаннера: - переменная $OnlineStatus$ показывает статус подключения в Интернету (проверяется пингом); - переменная $OnlineSwitch$ показывает состояние переключателя "поддерживать соединение с Интернетом или нет"; - переменная $MYJAMG$ показывает "возраст" пробочного файла СитиГида зеленым цветом; - переменная $MYJAMR$ показывает "возраст" пробочного файла СитиГида красным цветом (предполагается, что координаты надписи будут такими же, как и у $MYJAMG$; пример см. ниже). Для включения/отключения/переключения поддержателя соединения с Интернетом из RR надо дать команду (например, повесить это на отдельную кнопку): SENDMSG;avc_control.ahk;online - поддерживать соединение SENDMSG;avc_control.ahk;offline - не поддерживать соединение (при получении команды соединение разрывается) SENDMSG;avc_control.ahk;switch - поменять состояние поддерживать/не поддерживать 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 := "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 := "нет" ; что пишем на экране, если пробочный файл очень старый
; -------- конец редактируемых переменных - настроек ----------
WinAmpActive := 0
CityGuideActive := 0
day := 1
online := 0
setoffline := 0
oncheckonline := 0
Lastcheck := 0
checkperiod := - checkperiod * 1000
; Создаем пустое окно и сразу его прячем. Окно необходимо для получения команд управления от RR
Gui, Show
WinHide, avc_control.ahk
; Устанавливаем обработчик для приёма команд через WM_COPYDATA от RR
OnMessage(0x4A, "OnCopyData")
SetTimer, CheckWarnings, -1000
SetTimer, CheckInternet, %checkperiod%, -1 ; периодическая проверка подключения к Интернету (с пониженным приоритетом)
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 + 30000 < A_TickCount)
{
; WinAmp был запущен и существует до сих пор, но
; давно не было проверок, возможно, работа останавливалась
SetTimer, StartWinAmp, -1000
}
}
}
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
SetTimer, CheckWarnings, On
return
RestartAudio:
RunWait, net stop AudioSrv,, Hide
RunWait, net start AudioSrv,, Hide
return
CheckInternet:
; Обработчик интернет-проверок
If(oncheckonline = 1)
return
Else
oncheckonline := 1
If (setoffline = 1)
Gosub DoOffline
Gosub DoOnline
; Получаем время файла пробок
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)
}
SetTimer, CheckInternet, %checkperiod%, -1
oncheckonline := 0
return ; конец процедуры CheckInternet
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")
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::^!5 ; AutoHide для указателя мышки
^!+b::Click right ; имитация правой кнопки мышки
^!+a:: ; screenshot текущего экрана
RunWait, nircmd savescreenshot C:\PrScr.png,, Hide
FileGetTime, OutputVar, C:\PrScr.png, C
FileMove C:\PrScr.png, C:\Scrns\ss_%OutputVar%.png
return
^!+e:: ; Команда NEXT для WinAmp'а
PostMessage, 0x111, 40048,,, ahk_class RRWinamp ; следующий трек
return
^!+f:: ; Команда PREV для WinAmp'а
PostMessage, 0x111, 40044,,, ahk_class RRWinamp ; предыдущий трек
return
^!+h:: ; Команда 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
^!+i:: ; Переключатель профилей PowerStrip'а день/ночь
if(!day)
{
Send, ^!1
day := 1
}
else
{
Send, ^!2
day := 0
}
return
Код:
RoadRunner Skin RRScreen CityGuide IGUIDANCE_OFF.png,IGUIDANCE_OFF.png,IGUIDANCE_ON.png,IGUIDANCE_OFF.png INC,DFX_Font_Color.txt /, L, x, y, w, h, color R;RGB, G, B, font size;FONT, font name, Code;LABELCODES, Tooltip;LABELALIGNMENT L,2,94,71,41,#DFX1R#,#DFX1G#,#DFX1B#,24,"Arial","GPSALT","CENTER" L,8,402,36,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=Sat:","RIGHT" L,6,504,75,17,#DFX2R#,#DFX2G#,#DFX2B#,8,"Arial","=$OnLineSwitch$","LEFT" L,0,503,75,17,#DFX1R#,#DFX1G#,#DFX1B#,10,"Arial","=$OnLineStatus$","CENTER" L,45,402,33,26,#DFX1R#,#DFX1G#,#DFX1B#,16,"Arial","GPSSAT","LEFT" L,0,468,75,26,#DFX1R#,#DFX1G#,#DFX1B#,24,"Arial:B","=$MYJAMG$","CENTER" L,0,466,75,26,#DFX2R#,#DFX2G#,#DFX2B#,26,"Arial:B","=$MYJAMR$","CENTER" L,0,549,75,26,#DFX1R#,#DFX1G#,#DFX1B#,17,"Arial","=MENU","CENTER" L,0,266,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=ExtPos","CENTER" L,0,193,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=CurPos","CENTER" L,0,237,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=Mem","CENTER" L,0,165,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=Mem","CENTER" L,0,313,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=Toggle","CENTER" L,0,339,75,26,#DFX1R#,#DFX1G#,#DFX1B#,15,"Arial","=Track","CENTER" L,1,6,72,59,#DFX1R#,#DFX1G#,#DFX1B#,36,"Arial:B","GPSSPD","CENTER" /, B, x, y, w, h, Command;COMMANDCODES, Tooltip B,1,229,73,73,"LOCOSK", B,0,302,73,73,"ACTIVATE;City Guide||SENDKEY;^t", B,0,375,75,74,"SENDMSG;CamGrabber;SAVE","" B,-1,451,75,74,"SENDMSG;avc_control.ahk;switch","" B,1,523,75,74,"MAIN","" B,0,150,75,75,"LOC", /, A, x, y, w, h, color R;RGB, G, B A,77,1,724,599,,, END Код:
/DEFINE DFX1R 3 /DEFINE DFX1G 255 /DEFINE DFX1B 5 /DEFINE DFX2R 255 /DEFINE DFX2G 3 /DEFINE DFX2B 5
__________________
Мой Toyota Prius NHW11 Последний раз редактировалось ashu; 26.11.2008 в 12:38. |
|
|
|
|
|
#32 | |
|
Пользователь
![]() Регистрация: 29.03.2007
Город: Москва
Регион: 77, 97, 99, 177
Машина: 2008\Chevrolet Captiva
Сообщений: 89
![]() |
Цитата:
__________________
Текущий проект Мой ПРОШЛЫЙ проект: http://forum.pccar.ru/showthread.php?t=2295 Готовность: 80% (уже езжу) [RR, монитор noname 10.4" touch, мать MSI 945GM3-F, Core 2 Duo E2160 1.8Ghz, усилитель DLS MA41, Sound Creative X-Fi mX Xtreme Gamer PCI, TV-Tuner GoTView PCI DVD2 Deluxe FM internal, БП SL] |
|
|
|
|
|
|
#33 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
В ExecTBL.ini в каталоге скина RoadRunner'а.
__________________
Мой Toyota Prius NHW11 |
|
|
|
|
|
#34 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Как очередное продолжение
![]() Глюки, ошибки и зависоны на данный момент решены обслуживающим ahk-скриптом. Упреждающие действия с выключением/включением bluetooth-адаптера и остановом/запуском WinAmp'а и СитиГида удалены из ExecTBL.ini (оставлены только останов/запуск для avc_usb.exe и camgrabber.exe), так как возникающие иногда ошибки теперь устраняются тем же обслуживающим скриптом. Это позволило сократить время от момента включения компа до полной готовности системы.
__________________
Мой Toyota Prius NHW11 |
|
|
|
|
|
#35 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Чем кончилась борьба с подключением к Интернету через bluetooth...
Usb-bluetooth адаптер Jabra с родными widcomm'овскими дровами. После выхода из сна иногда (далеко не всегда) возникала ситуация, что всё работает, но rasdial не может подключиться к Интернету. Помогает либо ручная операция физически вынуть-вставить сам донгл в комп, либо перезагрузка компа. Ни то, ни другое меня не устраивало (донгл вообще глубоко закопан в подлокотник), хотелось полного автоматизма и без каких-либо перезагрузок компа (из сна комп просыпается намного быстрее обычной загрузки). Пробовал отключать/включать устройство при помощи devcon'а, идущего в комплекте RR, - не помогло. Пытался отключать/включать устройство при помощи SafelyRemove, - вроде б иногда помогало, но не всегда. Игры с rasdial'ом вообще мимо кассы, - максимум, что добивался, так это исчезновения ярлыка bluetooth-подключения вообще (до перезагрузки). Когда в очередной раз после выхода из сна rasdial отказался подключаться к Интернету, я стал искать какими манипуляциями всё ж можно добиться восстановления работы rasdial'а... И нашел, что если кликнуть правой кнопкой в трее по иконке bttray.exe (значек блютуса) и в появившемся меню выбрать самый нижний пункт - отключение блютуса, а потом через несколько секунд провести все те же действия и через нижний пункт меню включить блютус, то rasdial снова начинает весело подключаться к Интернету! Осталось дело за малым - автоматизировать этот процесс ![]() Подключением и отключением от Интернета у меня занимается мой обслуживающий ahk-скрипт, поэтому и решение искать я стал в рамках autohotkey'я. Подробно метод выяснения какую команду надо послать в окно (в том числе и скрытое) описан здесь. В случае с жаброй всё свелось к двум командам с паузами (в случае нескольких неудачных попыток подключиться к Интернету): PostMessage, 0x111, 7049,,, ahk_class AfxWnd42 ; bluetooth off Sleep, 4000 ; ждем примерно 4 секунды PostMessage, 0x111, 7048,,, ahk_class AfxWnd42 ; bluetooth on Sleep, 8000 ; ждём примерно 8 секунд Всё! Тырнет уже месяц есть всегда без перезагрузки! ![]() P.S. Скрипт еще немного доработал - теперь показывается не только возраст пробочного файла в минутах, но и название карты, для которого этот пробочный файл скачан. ![]()
__________________
Мой Toyota Prius NHW11 |
|
|
|
|
|
#36 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Вот нигде гайцы не шакалят на дороге, кроме РФ и Украины...
Видеорегистратор - очень полезная вещь. Очень почему-то хотелось установить его до путешествия в Болгарию... И не зря - сэкономил мне кучу нервов и права на полгода ![]() В Ленобласти меня попытались раскрутить на обгон через сплошную и лишение прав на полгода... Показал гайцу видеозапись - гаец вернул права с улыбкой: "Хорошая у Вас штука установлена" ![]() ![]() Похожая история была и на Украине, но там до просмотра видео дело не дошло. ![]()
__________________
Мой Toyota Prius NHW11 |
|
|
|
|
|
#37 |
|
Бывалый писикарщик
![]() Регистрация: 06.09.2007
Город: Питер
Регион: 78, 98
Машина: Тойота РАВ4, ХА50, 2021.
Сообщений: 3,085
![]() ![]() ![]() ![]() ![]() ![]() |
а разве у тебя КамГраббер не стоял? Почему им не стал пользоваться?
|
|
|
|
|
|
#38 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Стоял, но... Во-первых, мой слабенький комп с трудом тянул запись одной камеры, а хотелось больше... А во-вторых, требовалась надёжность, т.е. гарантированность записи, чем камграббер пока похвастаться не может.
__________________
Мой Toyota Prius NHW11 |
|
|
|
|
|
#40 |
|
Старший Пользователь
![]() Регистрация: 25.11.2007
Возраст: 53
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
![]() ![]() |
Да, всё тем же корейским регистратором, о котором писал тут: http://forum.pccar.ru/showthread.php?t=8935
__________________
Мой Toyota Prius NHW11 |
|
|
|
![]() |
| Метки |
| объемное макетирование |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
|
|