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

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   iCarDS (http://pccar.ru/forumdisplay.php?f=121)
-   -   iCarDS + Сон, Гибридный сон и Гибернация (http://pccar.ru/showthread.php?t=23331)

Lexx09 27.08.2015 17:18

Кстати, вместо задержки можно добавить проверку на наличие процесса iCarDS.exe и других...

Krysanov 27.08.2015 19:38

Вложений: 1
привет, LEXX09!
Своими вот как у меня сейчас работает (убрал пока блюстак, инет программу) твой скрипт, добавив Sleep(2000)


Код:

#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
#include
#include
; Это команда на сон
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")

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

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

        ;Закрываем Блюстак
        ; ShellExecute("C:\Program Files (x86)\BlueStacks\HD-Quit.exe")
    Sleep(2000)
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

Вложение 40895

seriousstas 27.08.2015 19:39

Lexx09
Цитата:

Windows засыпает быстрее, чем закрывается iCarDS
Думаю так и есть . У меня этот фокус получается , тк Икар не загружен программами ...
Ты мог-бы показать вариант(с ф-ей Suspend, для меня AutoIt почти тёмный лес ) с закрытием через Икар ,
то-есть , что-бы после отработки скрипта он закрывался , а запускать
всё-таки через планировщик . Маленький пример на одном Икаре ?
Цитата:

вместо задержки можно добавить проверку на наличие процесса iCarDS.exe
Ну и это прикрути тогда заодно :)

sirota 27.08.2015 20:05

Цитата:

Сообщение от seriousstas (Сообщение 336588)
sirota

Я почему спросил - на Твоём видео нет ни логотипа биоса ни ни логотипа загрузки 8-ки
и это больше похоже на выход их сна (гибернации) , чем обычная загрузка )
Если не сложно , сделай плиз видяху , с простой перезагрузкой (например кнопкой Икара)
при возможности ...


seriousstas 27.08.2015 20:23

Цитата:

Сообщение от sirota (Сообщение 336628)

Автор ограничил доступ :)

Krysanov 27.08.2015 20:29

Пока в посте выкладывал выше код, нашел кучу ошибок.. вроде все исправил... попробовал на дом ноуте, все ок... Надо в машине пробовать, а она уже в гараже:wacko2:...

sirota 27.08.2015 20:33

Цитата:

Сообщение от seriousstas (Сообщение 336634)
Автор ограничил доступ :)

Починил :bye:

Krysanov 27.08.2015 20:40

Цитата:

Сообщение от Lexx09 (Сообщение 336603)
Кстати, вместо задержки можно добавить проверку на наличие процесса iCarDS.exe и других...

и как это можно использовать? Не понял? Вот скрипт обнаруживает наличие процесса, например, iCarDS.exe и что дальше? Надо его закрывать .. Если процесс отсутствует, то скрипт выполняет следующую функцию:whistle:
Lexx09, покажи плиз, как будет выглядеть эта часть кода, .. есть интерес ...
ПС. Вопрос про БРИДЖ остается открытым..сорри за навязчивость:wink2:

Lexx09 27.08.2015 22:20

Цитата:

Сообщение от Krysanov (Сообщение 336641)
и как это можно использовать? Не понял? Вот скрипт обнаруживает наличие процесса, например, iCarDS.exe и что дальше? Надо его закрывать .. Если процесс отсутствует, то скрипт выполняет следующую функцию:whistle:

Смысл слежения за процессом iCarDS.exe вот в чем:
  • Если в течение заданного определенного времени, например, 3 сек, после выполнения команды WinClose("iCar DS") процесс iCarDS.exe все еще висит в памяти, то он принудительно завершается. Т.е. если iCarDS заглючил и подвис при закрытии, он будет принудительно убит, и только потом Windows уснет.
  • Если же iCarDS закрылся быстрее 3 сек, то скрипт сразу же начинает выполняться дальше, а не ждет истечения 3 сек. В результате - более быстрое наступление сна. :smile2:
Функция Suspend будет такая:
Код:

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

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

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

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

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

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

EndFunc

Цифра 3 в команде ProcessWaitClose - это и есть количество секунд ожидания завершения iCarDS до принудительного убития. В принципе, можно и 10 сек поставить, все равно такая пауза будет только тогда, когда iCarDS зависнет.

В варианте просто с паузой скрипт по любому будет ждать 3 сек, даже, если iCarDS закрылся за 1 сек. А если iCarDS заглючил, то при выходе из сна глюки продолжатся.

Lexx09 27.08.2015 23:21

Цитата:

Сообщение от seriousstas (Сообщение 336623)
Lexx09
Ты мог-бы показать вариант(с ф-ей Suspend, для меня AutoIt почти тёмный лес ) с закрытием через Икар ,
то-есть , что-бы после отработки скрипта он закрывался , а запускать
всё-таки через планировщик . Маленький пример на одном Икаре ?

Если я правильно понял, ты хочешь закрывать сам iCarDS из скрипта, который встроен в iCarDS, и который срабатывает при входе в сон? Если да, то:
  1. Закрывать родительский процесс (iCarDS.exe) из дочернего (ahk- или autoit-скрипт) не совсем неправильно. Ведь неизвестно, что там еще iCarDS будет делать после запуска встроенного скрипта. Хотя с ahk-скриптом вроде работает...
  2. Функция Suspend срабатывает в тот момент, когда Windows перед сном рассылает специальное сообщение (PBT_APMSUSPEND) всем процессам в системе. Как реализована обработка этого сообщения в iCarDS - неизвестно. Разработчик практически не участвует в наших дискуссиях.
Для экспериментов - вот код всего скрипта для встраивания в iCarDS:
Код:

WinClose("iCar DS")

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



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

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