PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Bluestacks (http://pccar.ru/forumdisplay.php?f=132)
-   -   iCarDS + Bluestacks + Яндекс.Навигатор (http://pccar.ru/showthread.php?t=19528)

Lexx09 30.09.2015 13:33

Цитата:

Сообщение от Lexx09 (Сообщение 339309)
Цитата:

Сообщение от Krysanov (Сообщение 339294)
Или может пока скрипт http://www.pccar.ru/showthread.php?t=23331&page=13 как то подправить, принудительно закрывать-открывать бридж при уходе в сон и просыпании... Только я не знаю, какой путь к бриджу надо писать... Думаю, это бы решило мою проблему..

Этим скриптом управлять GPSBridge'м ну никак не получится, ведь он находится внутри Bluestacks. Управлять можно только Windows-приложениями.

Порылся в сети...

Все таки можно убивать и запускать GPSBrdige из-под Windows с помощью ADB (Android Debug Bridge), прописав в скрипте такие команды:
Код:

$adb_path="Путь к файлу adb.exe";
ShellExecute($adb_path, "shell am force-stop com.rbc.gpsbridge");
ShellExecute($adb_path, "shell am start -n com.rbc.gpsbridge/com.rbc.gpsbridge.MainActivity");

Первая команда (2-я строка) - закрытие GPSBrdige.
Вторая команда (3-я строка) - запуск GPSBrdige.

Проверил на телефоне - GPSBridge убивается и запускается.)
Попозже проверю на Bluestacks, думаю, должно работать.

Krysanov, ну а пока можешь сам попробовать.
Скачай ADB отсюда, распакуй в папку C:\ADB.
В скрипте исправь функцию Suspend:
Код:

; Вход в спящий режим
Func Suspend()

        ; Закрываем iCarDS
        WinClose("iCar DS")

        ; Закрываем программу по коннекту интернета
        ProcessClose("SP Dialer.exe")

        ; Закрываем GpsGate
        WinClose("Franson GpsGate")

        ; Закрываем GPSBridge
        ShellExecute("C:\ADB\adb.exe", "shell am force-stop com.rbc.gpsbridge");
       
        ;Закрываем Блюстак
        ShellExecute("C:\Program Files (x86)\BlueStacks\HD-Quit.exe")

        If (ProcessWaitClose("iCarDS.exe", 3) == 0) Then
                ProcessClose("iCarDS.exe")
        EndIf
       
        If (ProcessWaitClose("SP Dialer.exe", 3) == 0) Then
                ProcessClose("SP Dialer.exe")
        EndIf

        If (ProcessWaitClose("HD-Frontend.exe", 3) == 0) Then
                ProcessClose("HD-Frontend.exe")
        EndIf

EndFunc

Запускаться GPSBridge будет моим лаунчером.

Еще не уверен, нужно ли теперь закрывать Bluestacks при входе в сон. Попробуй по всякому...

PS: И не уверен, что нужно закрывать GPSBridge перед сном. Ведь Bluestacks и так закрывается полностью через HD-Quit.exe.

Lexx09 30.09.2015 15:06

Хм, с этим ADB, возможно, и лаунчер станет не нужным. Можно из скрипта все запускать...

Krysanov 30.09.2015 16:49

Код HTML:

В скрипте исправь функцию Suspend:
исправил, попробовал , вот что вылезло
не удается найти путь C:\ADB\adb.exe shell am force-stop com.rbc.gpsbridge проверьте правильность пути:wacko2:

Lexx09 30.09.2015 17:03

Сорри, вот так надо прописать:
Код:

ShellExecute("C:\ADB\adb.exe", "shell am force-stop com.rbc.gpsbridge");

Krysanov 30.09.2015 17:37

Цитата:

Сообщение от Lexx09 (Сообщение 339352)
Сорри, вот так надо прописать:
Код:

ShellExecute("C:\ADB\adb.exe", "shell am force-stop com.rbc.gpsbridge");

Сейчас проверю и отпишусь...
А насчёт блюстака.. Не нужен он в скрипте как бы... Имхо

Krysanov 30.09.2015 17:55

получилось, запустилось

Вот код
Код HTML:

#pragma compile(Icon, "C:\Program Files (x86)\AutoIt3\Icons\au3script_v9.ico")
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <WindowsConstants.au3>
; Это команда на сон
Global $PBT_APMSUSPEND = 0x0004
Global $PBT_APMRESUMESUSPEND = 0x0007

$hGUI = GUICreate("Restart", 100, 100, 1, 1)
GUIRegisterMsg($WM_POWERBROADCAST, "Standby")

 ; Запускаем GpsGate
    ShellExecute("C:\Program Files (x86)\Franson\GpsGate 2.0\GpsGateXP.exe")

; Запускаем iCarDS
ShellExecute("C:\Program Files (x86)\TipTop software\iCar DS\iCarDS.exe")

; Запускаем Bluestacks вместе с лаунчером MyLauncher
        $Bluestacks_path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bluestacks", "InstallDir")
        ShellExecute($Bluestacks_path & "HD-RunApp.exe", "-p ru.znalexey.mylauncher -a ru.znalexey.mylauncher.LauncherActivity")

        ; Запускаем программу по коннекту интернета (У кого нет такой программы, тогда эту и следующие строки удалить!)
  ; ShellExecute("C:\Program Files (x86)\SP Dialer\SP Dialer.exe")

While 1
    Sleep(100)
WEnd

Func Standby($hWnd, $Msg, $wParam, $lParam)
    Select
        ; Вход в спящий режим
        Case $wParam = $PBT_APMSUSPEND
            Suspend()
        ; Выход из спящего режима
        Case $wParam = $PBT_APMRESUMESUSPEND
            ResumeSuspend()
        Case Else
    EndSelect
EndFunc

; Вход в спящий режим
Func Suspend()

    ; Закрываем iCarDS
    WinClose("iCar DS")

    ; Закрываем программу по коннекту интернета
    ;ProcessClose("SP Dialer.exe")

    ; Закрываем GpsGate
    WinClose("Franson GpsGate")

        ; Закрываем GPSBridge
        ShellExecute("C:\ADB\adb.exe", "shell am force-stop com.rbc.gpsbridge");

        ;Закрываем Блюстак
        ShellExecute("C:\Program Files (x86)\BlueStacks\HD-Quit.exe")

  If (ProcessWaitClose("iCarDS.exe", 3) == 0) Then
        ProcessClose("iCarDS.exe")
  EndIf
    ;If (ProcessWaitClose("SP Dialer.exe", 3) == 0) Then
        ;ProcessClose("SP Dialer.exe")
  ;EndIf

  If (ProcessWaitClose("HD-Frontend.exe", 3) == 0) Then
    ProcessClose("HD-Frontend.exe")
EndIf

EndFunc

; Выход из спящего режима
Func ResumeSuspend()

    ; Запускаем GpsGate
    ShellExecute("C:\Program Files (x86)\Franson\GpsGate 2.0\GpsGateXP.exe")

    ; Запускаем программу по коннекту интернета
  ; ShellExecute("C:\Program Files (x86)\SP Dialer\SP Dialer.exe")

        ; Запускаем Bluestacks вместе с лаунчером MyLauncher
        $Bluestacks_path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Bluestacks", "InstallDir")
        ShellExecute($Bluestacks_path & "HD-RunApp.exe", "-p ru.znalexey.mylauncher -a ru.znalexey.mylauncher.LauncherActivity")


    ; Запускаем iCarDS
    ShellExecute("C:\Program Files (x86)\TipTop software\iCar DS\iCarDS.exe")

EndFunc

теперь только кататься и проверять

Krysanov 30.09.2015 20:06

пробовал всяко.. ничего не изменилось.. После пробуждения бридж данные не принимает:zipped:

Krysanov 30.09.2015 20:47

Lexx09, подскажи, пожалуйста, каким бриджем пользоваться.. у меня их скачана куча разных.. пробовал всякие... решил начать с нуля...
какой бридж, какой блюстак будет испытуемым?

Lexx09 01.10.2015 00:28

У меня везде - GPSBridge v1.0.22, Bluestacks v0.9.27, Win7.

Krysanov 01.10.2015 05:08

Цитата:

Сообщение от Lexx09 (Сообщение 339394)
У меня везде - GPSBridge v1.0.22, Bluestacks v0.9.27, Win7.

Все также, за исключением винды 8.1

Krysanov 01.10.2015 12:26

Lexx09, Всё заработало ! В настройках икара убрал Режим восстановления , Загнал в автозагрузку блюстак ... Попробовал раз 10, все работает!!!
ИКАР В режиме восстановления не Работает должным образом !

Lexx09 01.10.2015 12:40

Т.е. GPSBridge теперь не глючит после выхода из сна?

Зачем Bluestacks в автозагрузке? Он же скриптом запускается вместе с лаунчером.

Krysanov 01.10.2015 15:31

Цитата:

Сообщение от Lexx09 (Сообщение 339418)
Т.е. GPSBridge теперь не глючит после выхода из сна?

Зачем Bluestacks в автозагрузке? Он же скриптом запускается вместе с лаунчером.

По другому не работает

Krysanov 01.10.2015 15:42

Пишу с телефона.. Блюстак не засыпает и, как следствие, при пробуждении компа висит картинка яд навигатора старая.. Это в режиме восстановление

Lexx09 01.10.2015 15:57

Непонятно... Bluestack же закрывается этим скриптом при входе в сон...

Krysanov 01.10.2015 17:44

Тем не менее это так, все сейчас работает

sclif83 01.10.2015 19:53

Вложений: 1
подскажите у меня при запуске ЯН вылезает вот такое окно,
Вложение 41164
как его убрать или сделать чтобы оно само пряталось?

Krysanov 01.10.2015 21:01

Цитата:

Сообщение от sclif83 (Сообщение 339447)
подскажите у меня при запуске ЯН вылезает вот такое окно,
.....
как его убрать или сделать чтобы оно само пряталось?

Очень просто... у тебя бридж не подхватывает данные с гейта, либо гейт горит красным или желтым, те сам не передает данные ..
если обратишь внимание на свой рисунок (очень засвеченный между прочим:acute:), то в правом верхнем углу увидишь два кружочка - желтый и синий.. так вот желтый - это стрелка, данный цвет сигнализирует, что что то с gps данными не то (либо бридж, либо гейт, выше уже писал)... синий - бридж... мышкой потяни от этих кружочков вниз, появится меню, выбери бридж, выбери три точки, потом настройки и посмотри данных нет:pleasantry:)
Я, кстати, по желтому кружку стрелки определяю, что не работает GPS и тупо закрываю блюстак и вновь его открываю... если в икаре скорость показвает, а GPS не работает, значит дело в бридже.. и перезапуск, как правило (мне по крайней мере), помогает....

Krysanov 01.10.2015 21:12

Цитата:

Сообщение от Lexx09 (Сообщение 339430)
Непонятно... Bluestack же закрывается этим скриптом при входе в сон...

По ходу не закрывается..Как проверить? Могу вернуть назад режим восстановления в настройках икара, запустить блюстак и яд навигатор, потом заставить уснуть и разбудить.. Все это записать на видео для анализа.. Скрипт использую тот же..
Надо?

Andy_ro 02.10.2015 11:18

[QUOTE=Krysanov;339453] ...то в правом верхнем углу... [QUOTE]

Наверное в левом верхнем всё же:whistle:

Krysanov 02.10.2015 12:44

[QUOTE=Andy_ro;339491][QUOTE=Krysanov;339453] ...то в правом верхнем углу...
Цитата:


Наверное в левом верхнем всё же:whistle:
Ага, но поправить был должен вопрошающий:tease:

Lexx09 06.10.2015 17:19

Не пользовался раньше спящим режимом, решил поэкспериментировать (с гибридным спящим режимом). Проблем никаких пока не наблюдаю. Windows вместе с iCarDS и Bluestacks прекрасно возобновляются независимо от времени, проведенного в гибридном сне.

Есть пара нюансов:
  • В панели уведомлений Windows размножаются иконки GpsGate.
  • Если перед сном был открыт Bluestacks, то после возобновления иногда отсутствует наложенная на него кнопка iCarDS. Добавил в скрипт в конец функции ResumeSuspend такую команду:
    Код:

    WinActivate("iCar DS")
    Вроде пропадать перестала.

PS: Кстати, голосовое управление в ЯН - очень удобная штука для такси. Народ прозревает от высоких технологий.)

Krysanov 06.10.2015 17:53

Пройдёт немного времени, и посыпятся проблемы... У меня все так и происходит... Как будто винда накапливает ошибки... Потом и глюки вылазят всякие..

Lexx09 06.10.2015 18:19

Размножение иконок GpsGate поборол.

Вместо команды:
Код:

WinClose("Franson GpsGate")
надо использовать:
Код:

ShellExecute("C:\Program Files (x86)\Franson\GpsGate 2.0\GpsGateXP.exe", "-exit")

Lexx09 06.10.2015 18:23

Цитата:

Сообщение от Krysanov (Сообщение 339776)
Пройдёт немного времени, и посыпятся проблемы... У меня все так и происходит... Как будто винда накапливает ошибки... Потом и глюки вылазят всякие..

Ну, при постоянном сне, без перезагрузок, различные ошибки могут и накапливаться. Это ж не серверный Linux, который годами можно не перезагружать...

Будем бороться...

Krysanov 06.10.2015 18:42

Цитата:

Сообщение от Lexx09 (Сообщение 339780)
Ну, при постоянном сне, без перезагрузок, различные ошибки могут и накапливаться. Это ж не серверный Linux, который годами можно не перезагружать...

Будем бороться...

Ты может и прав.. У меня на работе стоит вин 7.. Тоже настроено, как и в машине (только в машине вин 8.1). Только ничего не ломается, ничего не накапливается.. Конечно, на работе пришёл , включил комп, перед уходом на кнопку нажал , те не более 4 раз в день.. В машине ... Как ездишь, бывает более 50 вкл -выкл происходит...
Сейчас - желание вернуть все назад.. Пусть лучше включается дольше, зато блин, без глюков...

Lexx09 18.10.2015 20:40

Немного поковырялся во внутренностях Bluestacks по поводу GPS...

Для начала посмотрел реестр. В ветке HKLM\SOFTWARE\BlueStacks\Guests\Android\Config есть такие параметры:
  • GpsComPort
  • GpsLatitude
  • GpsLongitude
  • GpsMode
  • GpsSource
Поискал эти слова в файлах BlueStacks, нашел в нескольких.

Начал с HD-Agent.exe. Нашел в нем форму GpsSettings, которая, вероятно, служит для настройки работы с GPS. В этом же файле есть функция, которая, если GpsMode<>1, добавляет меню показа этой формы в контекстное меню иконки агента в трее. Но эта функция ниоткуда не вызывается. Правкой HD-Agent.exe не удалось отобразить этот пункт меню.

Далее в HD-Agent.exe нашел возможные значения параметра GpsSource:
  • 1 - GPS_SOURCE_HW_DEVICE (Hardware device) - координаты берутся из COM-порта, указанного в параметре GpsComPort (порт указывается не просто цифрой, а полностью - "COM1", "COM2" и т.д.)
  • 2 - GPS_SOURCE_WIFI (Wifi triangulation)
  • 4 - GPS_SOURCE_IP (IP based GeoLocation)
  • 8 - GPS_SOURCE_USER (User specified location) - координаты берутся из реестра (параметры GpsLatitude и GpsLongitude)
Потом разбирался с HD-Frontend.exe. Нашел в нем функцию UpdateGpsCoordinates. Сюда по логам, она вызывается каждые 20 сек. В логах такие есть записи:
Код:

NFO Inside UpdateGpsCoordinates
HTTPHandler:  POST request from 127.0.0.1:7055
INFO Stopping Gps Service, gpsMode = 1, gpsSource = 0, IsWindows7AndBelow() = True

Эта функция в двух случаях берет координаты из реестра и куда-то отправляет:
  1. Если GpsMode=1 и GpsSource=8
  2. Если GpsMode=1 и GpsSource<>8 и Windows версии 8 и выше
Проверил работу с COM-портом. Прописал GpsMode=1, GpsSource=1, GpsComPort=COM2 (виртуальный порт в GpsGate). Выяснил, что обращение к COM-порту происходит только один раз и только в момент запуска приложения, требующего GPS. При этом в GpsGate мелькнет надпись "1 client connected". Во время дальнейшей работы приложения обращений к COM-порту нет. Причем, с первого раза координаты все равно не определяются. Нужно приложение пару раз перезапустить, тогда координаты определятся.

Проверил работу с получением координат из реестра. Прописал GpsMode=1, GpsSource=8, GpsLatitude и GpsLongitude - какие-то координаты. Координаты определяются, но так же, как и в предыдущем случае - приложение нужно пару раз перезапустить, тогда оно увидит правильные координаты (прописанные в реестре).

Далее решил разобраться с датчиком местоположения (на основе VK-172). В логах нашел такие строки:
Код:

INFO Need Windows 8 or Higher for GpsLocator to work.
Т.е., данные с датчика местоположения берутся только в Win8 и выше. Странное ограничение, ведь в Win7 тоже есть датчики местоположения. Решил исправить это недоразумение и пропатчил HD-Agent.exe. В логах появились такие записи:
Код:

HD-GpsLocator INFO LocationChanged
HD-GpsLocator INFO the registry path returned is Software\BlueStacks\Guests\Android\Config
HD-GpsLocator INFO the registry path returned is Software\BlueStacks\Guests\Android\Config
HD-GpsLocator INFO Latitude: 45.014058
HD-GpsLocator INFO Longitude: 39.050568

Судя по логам, координаты берутся с датчика практически в реальном времени. Встречается 9 таких записей за секунду. При этом также обновляются координаты в реестре. Но приложения, запущенные в Bluestacks, координаты в реальном времени не видят.

С помощью GpsDirect можно эмулировать датчик местоположения, получая данные с какого-либо COM-порта. Bluestacks с таким датчиком работать будет.

Для работы с датчиком местоположения, в момент запуска Bluestacks GpsSource не должен быть равен 8. После запуска Bluestacks и подключения к датчику местоположения GpsSource становится равным 2.

В общем, возможность для работы с GPS в реальном времени есть, но не реализована полностью. Возможно, причина в той части Bluestacks, которая эмулирует Android, т.к. в Windows-части координаты считываются и отсылаются.

Krysanov 18.10.2015 20:55

Ого, на кандидатскую тянет..:bye:

Tygra 18.10.2015 21:16

А я забил на эмулятор и его глюки, установил ситигид , просто летает, карты бесплатные, работает сейчас лучше чем долбанный навител, я уже несколько раз пожалел что купил навител на андроид ( на телефон) ...

Krysanov 18.10.2015 22:00

Цитата:

Сообщение от Lexx09 (Сообщение 339779)
Размножение иконок GpsGate поборол.

Вместо команды:
Код:

WinClose("Franson GpsGate")
надо использовать:
Код:

ShellExecute("C:\Program Files (x86)\Franson\GpsGate 2.0\GpsGateXP.exe", "-exit")

пользуюсь подсказкой.. с помогло..:wink2:
решил попробовать с программой авто запуска интернета , прописал
; Закрываем программу по коннекту интернета
ShellExecute("C:\Program Files (x86)\SP Dialer\SP Dialer.exe", "-exit")
и не получилось... иконок несколько:shok: взял отсюда . Еще раз спасибо за своевременную помощь!!!

Lexx09 18.10.2015 23:07

Цитата:

Сообщение от Krysanov (Сообщение 340753)
решил попробовать с программой авто запуска интернета , прописал
; Закрываем программу по коннекту интернета
ShellExecute("C:\Program Files (x86)\SP Dialer\SP Dialer.exe", "-exit")
и не получилось...

Эта команда не универсальная для всех приложений, а индивидуальная для GpsGate.

Krysanov 19.10.2015 18:34

Цитата:

Сообщение от Lexx09 (Сообщение 340760)
Эта команда не универсальная для всех приложений, а индивидуальная для GpsGate.

Ок, а универсальную как добыть?

Lexx09 19.10.2015 20:17

Цитата:

Сообщение от Krysanov (Сообщение 340839)
Ок, а универсальную как добыть?

Универсальные - "WinClose", "ProcessClose".)

Krysanov 19.10.2015 20:33

Цитата:

Сообщение от Lexx09 (Сообщение 340847)
Универсальные - "WinClose", "ProcessClose".)

вот наткнулся на это http://autoit-script.ru/index.php?topic=2775.0

Krysanov 19.10.2015 20:58

lexx09, как это
Код:

_SysTrayIconRemove(...)
Opt('TrayIconHide', 0)
Opt('TrayIconHide', 1)

будет работать в скрипте? Я так понимаю, данная функция будет отлавливать все "мертвые" иконки и скрывать их?

Lexx09 19.10.2015 21:11

Цитата:

Сообщение от Krysanov (Сообщение 340851)
lexx09, как это
Код:

SysTrayIconRemove(...)
Opt('TrayIconHide', 0)
Opt('TrayIconHide', 1)

будет работать в скрипте? Я так понимаю, данная функция будет отлавливать все "мертвые" иконки и скрывать их?

Конкретно это кусок кода работать не будет, т.к. в команде SysTrayIconRemove отсутствует параметр.

В 7-м ответе вроде рабочий пример.

Krysanov 19.10.2015 22:11

Цитата:

Сообщение от Lexx09 (Сообщение 340852)
...
В 7-м ответе вроде рабочий пример.

в 7-ом ни чего не вижу, может в 8-ом?
Код:

#NoTrayIcon
#include
Local $PID

While 1
    $PID = _SysTrayIconPids()
    For $i = 0 To UBound($PID)-1
        If $PID[$i] = -1 Then _SysTrayIcon_MouseOver($i)
    Next
    Sleep(3000)
WEnd

Func _SysTrayIcon_MouseOver ($iIndex)
    Local $TrayIcon_Pos = _SysTrayIconPos($iIndex)
    Local $Old_Mouse_Pos = MouseGetPos()
    MouseMove($TrayIcon_Pos[0], $TrayIcon_Pos[1], 0)
    Sleep(10)
    MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc


Lexx09 19.10.2015 22:17

Так это и есть 7-й ответ (он же является 8-м сообщением).

Я так предполагаю, что в первом сообщении тоже рабочий вариант.

Krysanov 20.10.2015 13:21

Цитата:

Сообщение от Lexx09 (Сообщение 340861)
Так это и есть 7-й ответ (он же является 8-м сообщением).

Я так предполагаю, что в первом сообщении тоже рабочий вариант.

Не поделишься SysTray_UDF.au3 ? Сори за офтоп

Lexx09 20.10.2015 17:08

У меня нет ее.


Часовой пояс GMT +4, время: 13:14.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot