20.11.2008, 18:34 | #31 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 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. |
25.11.2008, 07:39 | #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] |
|
25.11.2008, 09:18 | #33 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
|
В ExecTBL.ini в каталоге скина RoadRunner'а.
__________________
Мой Toyota Prius NHW11 |
26.11.2008, 15:05 | #34 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
|
Как очередное продолжение
Глюки, ошибки и зависоны на данный момент решены обслуживающим ahk-скриптом. Упреждающие действия с выключением/включением bluetooth-адаптера и остановом/запуском WinAmp'а и СитиГида удалены из ExecTBL.ini (оставлены только останов/запуск для avc_usb.exe и camgrabber.exe), так как возникающие иногда ошибки теперь устраняются тем же обслуживающим скриптом. Это позволило сократить время от момента включения компа до полной готовности системы.
__________________
Мой Toyota Prius NHW11 |
23.05.2009, 01:02 | #35 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 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 |
28.07.2009, 13:09 | #36 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
|
Вот нигде гайцы не шакалят на дороге, кроме РФ и Украины...
Видеорегистратор - очень полезная вещь. Очень почему-то хотелось установить его до путешествия в Болгарию... И не зря - сэкономил мне кучу нервов и права на полгода В Ленобласти меня попытались раскрутить на обгон через сплошную и лишение прав на полгода... Показал гайцу видеозапись - гаец вернул права с улыбкой: "Хорошая у Вас штука установлена" Похожая история была и на Украине, но там до просмотра видео дело не дошло.
__________________
Мой Toyota Prius NHW11 |
28.07.2009, 15:40 | #37 |
Бывалый писикарщик
Регистрация: 06.09.2007
Город: Питер
Регион: 78, 98
Машина: Тойота РАВ4, ХА50, 2021.
Сообщений: 3,085
|
а разве у тебя КамГраббер не стоял? Почему им не стал пользоваться?
|
28.07.2009, 18:44 | #38 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
|
Стоял, но... Во-первых, мой слабенький комп с трудом тянул запись одной камеры, а хотелось больше... А во-вторых, требовалась надёжность, т.е. гарантированность записи, чем камграббер пока похвастаться не может.
__________________
Мой Toyota Prius NHW11 |
28.07.2009, 23:52 | #40 |
Старший Пользователь
Регистрация: 25.11.2007
Возраст: 52
Город: СПб, Гондурас
Регион: 78, 98
Машина: Toyota Prius 11S выпуска 2001/09
Сообщений: 766
|
Да, всё тем же корейским регистратором, о котором писал тут: http://forum.pccar.ru/showthread.php?t=8935
__________________
Мой Toyota Prius NHW11 |
Метки |
объемное макетирование |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|