------------------------------------------------------------------------------- ОПИСАНИЕ ------------------------------------------------------------------------------- Данное приложение может использоваться * для перезапуска стандартного шелла на магнитолах kia/hyundai и вообще на любых устройствах с wince. * Для подмены окна и перехвата сообщений. * Для анализа активности приложений в wince. * И много для чего еще, поведение полностью настраивается файлом конфигурации. Управление: * Окно можно перетаскивать * Тройной клик -- убрать сплеш-скрин * Клик -- листать лог * Повторный тройной клик -- выйти ------------------------------------------------------------------------------- ФАЙЛ КОНФИГУРАЦИИ ------------------------------------------------------------------------------- В папке conf находятся примеры конфигов, имя конфига должно быть таким же как имя приложения, но с расширением .cfg Конфиг состоит: * из настроек приложения * секций выполнения. Секции выполняются последовательно. Действия внутри каждой секции неразрывны (кроме PostWnd с timeout большим 0). Следует иметь в виду, что между секциями может прийти сообщение, которое поменяет порядок выполнения (если не используется immediateJump). Правила написания файла конфишурации: 1. Имя файл настроек должно быть таким же как имя приложения, но с расширением .cfg 2. Файл настроек читается построчно, пробельные символы отсекаются. Строки могут быть следующего типа: 2.1. Пустая строка (содержащая только пробельные символы) -- пропускается; 2.2. Комментарий (строка начинающаяся с ; или #) -- пропускается; 2.3. Секция [name] 2.3.1 Имя секции регистронезависимо 2.4. Аргумент name=value 2.4.1 Имя аргумента регистронезависимо, пробельные символы для name и value также отсекаются; 2.4.2 Целочисленные аргументы задаются как в десятичном так и в шеснадцатиричном виде, например, arg = 0x10 или arg = 16; 2.4.3 Строковые аргументы могут иметь сразу до трех значений: arg = val1; val2 Например, Wnd = Window Class; Window Title 2.4.4 При необходимости можно указать строку с крайними пробельными символами таким образом: Wnd = ' Window Class '; 'Window Title ' 2.4.5 Булевские аргументы могут принимать только значения yes и no 2.4.6 Строковые аргументы могут включать переменные в виде ${name:default} Где name имя переменной, default - значение по умолчанию. Переменные хранятся в памяти приложения. Если переменная при обращении не найдена в памяти, будет попытка считать ее с диска из файла <каталог_приложения>\state\name.state Если считать из файла не удалось, будет использано значение по умолчанию Кроме того есть встроенная системная переменная $args, хранящая в себе параметры, с которыми запущено приложение. Пример использования переменных: [StartProc] path = \Storage Card\${lastapp;notepad.exe}; $args ------------------------------------------------------------------------------- 1. НАСТРОЙКИ ------------------------------------------------------------------------------- Имя Описание тип: по умолчанию ------------------------------------------------------------------------------- width Ширина окна int: 420 ------------------------------------------------------------------------------- height Длина окна int: 450 ------------------------------------------------------------------------------- x Координата x левого верхнего угла окна int: 0 ------------------------------------------------------------------------------- y Координата y левого верхнего угла окна int: 0 ------------------------------------------------------------------------------- splash Путь до bmp файла, закрывает окно str: NULL ------------------------------------------------------------------------------- minimize ShowWindow при старте запускается c SW_MINIMIZE bool: no ------------------------------------------------------------------------------- hide ShowWindow при старте запускается c SW_HIDE. Параметр bool: no не совместим с предыдущим. ------------------------------------------------------------------------------- wClass Класс окна str: LISA_RELOADER ------------------------------------------------------------------------------- wTitle Заголовок окна str: Lisa Reloader ------------------------------------------------------------------------------- separator Разделитель строк, имеющих несколько значений. Может быть str: ; переопределен любой строкой. Например, separator = sep и Arg = Value1 sep Value2 ------------------------------------------------------------------------------- quote Можно переопределить кавычку любой строкой. str: ' Например, quote = @# и Arg = @# Value1 @# ------------------------------------------------------------------------------- secondNoActivate Второй экземпляр с таким же классом и заголовком bool: no не активирует предыдущее окно ------------------------------------------------------------------------------- secondNoExit Второй экземпляр с таким же классом и заголовком bool: no не завершает работу ------------------------------------------------------------------------------- benchmark Засечь время выполнения скрипта bool: no ------------------------------------------------------------------------------- emptyAsNull Трактовать пустые значения как NULL для вызова FindWindow bool: yes ------------------------------------------------------------------------------- immediateJump Немедленно приступать к выполнению следующей секции, если bool: no текущая не является последней в цепочке. В обычном режиме выполнение следующей секции ставится в очередь сообщений на равне с системными сообщениями, соответтственно цепочка выполнения может быть прервана. Чтобы гарантированно отрабатывать все секции в цепочке, необходимо включить данную опцию. В качестве побочного эффекта можно увидеть задержки отрисовки окна. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 2. СЕКЦИИ ------------------------------------------------------------------------------- section Имя секции argument1 Не обязательный аргумент argument2 ! Обязательный аргумент argument3 ... Аргумент может повторяться многократно argument4 = 0 Аргумент со значением по умолчанию ------------------------------------------------------------------------------- error Служебная секция. Нельзя использовать ------------------------------------------------------------------------------- Wait Секция ничего не делает (можно ждать с аргументом wait) ------------------------------------------------------------------------------- Stop Секция останавливает обработку скрипта ------------------------------------------------------------------------------- Exit Завершение работы ------------------------------------------------------------------------------- ListWnd Отобразить список всех окон ------------------------------------------------------------------------------- PostWnd Отправить сообщение msg с параметрами wParam и lParam окну timeout = 0 или окнам wnd (смотри описание аргумента wnd), используя wnd ... PostMessage. msg = 0x0 Если указан timeout больший нуля, то ждем завершения wParam = 0x0 приложения, которому отправили сообщение, полезно lParam = 0x0 при отправлении WM_CLOSE. useSend = no Если useSend = yes, используем SendMessage вместо onSuccess PostMessage. onError Если onSuccess указан, в случае успеха переходим к указанной секции. Если onError указан, в случае ошибки функций FindWindow или PostMessage переходим к указанной секции. ------------------------------------------------------------------------------- RepostWnd Отправить сообщение, полученное в секции [WaitMsg] окну wnd ... или окнам wnd (смотри описание аргумента wnd), используя onSuccess PostMessage. onError Если onSuccess указан, в случае успеха переходим к указанной секции. Если onError указан, в случае ошибки функций FindWindow или PostMessage переходим к указанной секции. ------------------------------------------------------------------------------- FindWnd Искать окно или окна wnd. wnd ... Варианты check: check foreground - GetForegroundWindow onSuccess Если onSuccess указан, в случае успеха переходим onError к указанной секции. Если onError указан и FindWindow не нашел хотя бы одно окно или не пройдена проверка check переходим к указанной секции. ------------------------------------------------------------------------------- SetWnd Выполняем action для окна или окон wnd. action ! Варианты action: wnd ... show - ShowWindow, flags - второй параметр flags = 0x0 foreground - SetForegroundWindow onSuccess focus - SetFocus onError Если onSuccess указан, в случае успеха переходим к указанной секции. Если onError указан и FindWindow не нашел хотя бы одно окно или соответствующая функция вернула ошибку, переходим к указанной секции ------------------------------------------------------------------------------- ListProc Отобразать список всех процессов proc Если указан proc, отобразить список окон этого процесса Если proc = all, отобразить все процессы с окнами ------------------------------------------------------------------------------- KillProc Убить процессы, перечисленные в proc, используя proc ... TerminateProcess. onSuccess Если onSuccess указан, в случае успеха переходим onError к указанной секции. Если onError указан и OpenProcess или TerminateProcess вернули ошибку переходим к указанной секции ------------------------------------------------------------------------------- StartProc Запустить процессы с параметрами, перечисленные в path, path ... используя CreateProcess. onSuccess Если onSuccess указан, в случае успеха переходим onError к указанной секции. Если onError указан и CreateProcess вернули ошибку переходим к указанной секции Во второй части path может использоваться системная переменная $args ------------------------------------------------------------------------------- LogMsg Логировать все сообщения, кроме указанных в msg. msg ... Также пропускать все сообщения, параметры которых равны wParam ... указанным wParam и lParam. Другими словами аргументы задают lParam ... фильтры. ------------------------------------------------------------------------------- RegMsg Регистрировать сообщения для будущего перехвата с указанием handler ! секции обработчика. 0xFFFFFFFF означает любое значение msg ! параметра. wParam = 0xFFFFFFFF lParam = 0xFFFFFFFF ------------------------------------------------------------------------------- WaitMsg Запустить перехват сообщений зарегистрированных ранее. ------------------------------------------------------------------------------- Input Симулировать ввод с клавиатуры с помощью keybd_event. keyDown ... Действия выполняются последовательно в том порядке, keyUp ... как они указаны. Действий может быть сколько угодно. sleep ... Значения keyDown и keyUp - 0x0 - 0xFF Значение sleep - время задержки ------------------------------------------------------------------------------- Save Сохранить значение value в переменные с именами name name ... Если flush имеет значение yes, то переменные с именами value name сохранятся в файлы <каталог_приложения>\state\*.state flush = no При этом value указывать не обязательно, сохранение на диск set ... будет с предыдущими значениями Вместо name и value можно использовать запись с использованием аргумента set, в этом случае конкретной переменной будет присвоено конкретное значение. ------------------------------------------------------------------------------- Time Работа со временем. mshift mshift -- сдвиг времени в минутах относительно текущего tz может быть как положительным, так и отрицательным tz -- имя таймзоны, например, Russian Standard Time Ниже смотрите информацию по таймзонам ------------------------------------------------------------------------------- Include Включить секции, описанные в указанном файле. path ! Путь может быть как абсолютным, так и относительным. Сразу после аргумента path будет вставленна первая секция из указанного файла, поэтому при необходимости общие аргументы типа label должны указваться до path ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 3. АРГУМЕНТЫ ------------------------------------------------------------------------------- print Служебный аргумент. Нельзя использовать ------------------------------------------------------------------------------- label Может быть в любой секции. Задает метку секции, по ней можно перейти в секцию используя onError или handler. ------------------------------------------------------------------------------- wait = 0 Может быть в любой секции. Задает время ожидания в миллисекундах до перехода к следующей секции. ------------------------------------------------------------------------------- stop = no Может быть в любой секции. Говорит о том, что секция является последней, т.е. остановить выполнение скрипта. ------------------------------------------------------------------------------- jump Может быть в любой секции. Метка безусловного перехода. ------------------------------------------------------------------------------- timeout Время в миллисекундах ------------------------------------------------------------------------------- wnd Строка с тремя значениями, первое -- это класс окна, второе -- это заголовок окна, третье -- имя процесса. Пример: Wnd = LISA_RELOADER; Lisa Reloader; LReloader.exe Внимание! При использовании имени процесса выполнение существенно замедляется, т.к. каждый раз происходит перечисление всех процессов. ------------------------------------------------------------------------------- msg Любое пользовательское или системное сообщение Windows. Например, WM_CLOSE - 0x10 ------------------------------------------------------------------------------- wParam wParam для сообщения ------------------------------------------------------------------------------- lParam lParam для сообщения ------------------------------------------------------------------------------- useSend Флаг для PostWnd ------------------------------------------------------------------------------- action Действие для SetWnd ------------------------------------------------------------------------------- flags Параметр для ShowWindow в секции SetWnd ------------------------------------------------------------------------------- check Проверка для FindWnd ------------------------------------------------------------------------------- proc Имя процесса ------------------------------------------------------------------------------- path Строка с двумя значениями, первое -- это путь до исполняемого файла, второе -- это параметры запуска. Пример: Wnd = \Storage Card\LisaReloader.exe; arg1 arg2 ------------------------------------------------------------------------------- onSuccess Метка обработчика ошибок. При успешном выполнении текущей секции вместо перехода к следующей секции переходим в указанную. ------------------------------------------------------------------------------- onError Метка обработчика ошибок. При возникновении ошибки вместо перехода к следующей секции переходим в указанную. ------------------------------------------------------------------------------- handler Метка обработчика сообщения. ------------------------------------------------------------------------------- keyDown Код клавиши в диапазоне 0x0 - 0xFF ------------------------------------------------------------------------------- keyUp Код клавиши в диапазоне 0x0 - 0xFF ------------------------------------------------------------------------------- sleep Время в миллисекундах ------------------------------------------------------------------------------- name Имя переменной ------------------------------------------------------------------------------- value Значение переменной ------------------------------------------------------------------------------- set Установить значение переменной. Пример: set = name; value ------------------------------------------------------------------------------- flush Выгрузить изменения на диск ------------------------------------------------------------------------------- mshift Сдвиг времени в минутах. Может быть как положительным, так и отрицательным ------------------------------------------------------------------------------- tz Название таймзоны. Информацию по таймзонам смотрите ниже ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ПРИЛОЖЕНИЕ 1. Таймзоны ------------------------------------------------------------------------------- В Win CE таймзоны перечислены в реестре по пути HKEY_LOCAL_MACHINE\Time Zones\ Для справки приведены таймзоны взятые с ШГУ с прошивкой 7.5.8 В скриптах нужно указывать значение из второй колонки (GMT+13:00) Nuku'alofa Tonga Standard Time (GMT+12:00) Auckland, Wellington New Zealand Standard Time (GMT+12:00) Fiji, Kamchatka, Marshall Is. Fiji Standard Time (GMT+11:00) Magadan, Solomon Is., New Caledonia Central Pacific Standard Time (GMT+10:00) Guam, Port Moresby West Pacific Standard Time (GMT+10:00) Vladivostok Vladivostok Standard Time (GMT+10:00) Hobart Tasmania Standard Time (GMT+10:00) Brisbane E. Australia Standard Time (GMT+10:00) Canberra, Melbourne, Sydney AUS Eastern Standard Time (GMT+09:30) Adelaide Cen. Australia Standard Time (GMT+09:30) Darwin AUS Central Standard Time (GMT+09:00) Yakutsk Yakutsk Standard Time (GMT+09:00) Osaka, Sapporo, Tokyo Tokyo Standard Time (GMT+09:00) Seoul Korea Standard Time (GMT+08:00) Kuala Lumpur, Singapore Singapore Standard Time (GMT+08:00) Irkutsk, Ulaan Bataar North Asia East Standard Time (GMT+08:00) Perth W. Australia Standard Time (GMT+08:00) Taipei Taipei Standard Time (GMT+08:00) Beijing, Chongqing, Hong Kong, ... China Standard Time (GMT+07:00) Krasnoyarsk North Asia Standard Time (GMT+07:00) Bangkok, Hanoi, Jakarta SE Asia Standard Time (GMT+06:30) Yangon (Rangoon) Myanmar Standard Time (GMT+06:00) Almaty, Novosibirsk N. Central Asia Standard Time (GMT+06:00) Astana, Dhaka Central Asia Standard Time (GMT+05:45) Kathmandu Nepal Standard Time (GMT+05:30) Sri Jayawardenepura Sri Lanka Standard Time (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi India Standard Time (GMT+05:00) Islamabad, Karachi, Tashkent West Asia Standard Time (GMT+05:00) Ekaterinburg Ekaterinburg Standard Time (GMT+04:30) Kabul Afghanistan Standard Time (GMT+04:00) Baku Azerbaijan Standard Time (GMT+04:00) Yerevan Caucasus Standard Time (GMT+04:00) Abu Dhabi, Muscat Arabian Standard Time (GMT+03:30) Tehran Iran Standard Time (GMT+03:00) Tbilisi Georgian Standard Time (GMT+03:00) Baghdad Arabic Standard Time (GMT+03:00) Nairobi E. Africa Standard Time (GMT+03:00) Kuwait, Riyadh Arab Standard Time (GMT+03:00) Moscow, St. Petersburg, Volgograd Russian Standard Time (GMT+02:00) Beirut Middle East Standard Time (GMT+02:00) Amman Jordan Standard Time (GMT+02:00) Windhoek Namibia Standard Time (GMT+02:00) Jerusalem Israel Standard Time (GMT+02:00) Harare, Pretoria South Africa Standard Time (GMT+02:00) Athens, Bucharest, Istanbul GTB Standard Time (GMT+02:00) Helsinki, Kyiv, Riga, Sofia, ... FLE Standard Time (GMT+02:00) Cairo Egypt Standard Time (GMT+02:00) Minsk E. Europe Standard Time (GMT+01:00) West Central Africa W. Central Africa Standard Time (GMT+01:00) Amsterdam, Berlin, Bern, Rome, ... W. Europe Standard Time (GMT+01:00) Brussels, Copenhagen, Madrid, Paris Romance Standard Time (GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb Central European Standard Time (GMT+01:00) Belgrade, Bratislava, Budapest... Central Europe Standard Time (GMT) Casablanca, Monrovia, Reykjavik Greenwich Standard Time (GMT) Greenwich Mean Time : Dublin, ... GMT Standard Time (GMT-01:00) Cape Verde Is. Cape Verde Standard Time (GMT-01:00) Azores Azores Standard Time (GMT-02:00) Mid-Atlantic Mid-Atlantic Standard Time (GMT-03:00) Greenland Greenland Standard Time (GMT-03:00) Buenos Aires, Georgetown SA Eastern Standard Time (GMT-03:00) Brasilia E. South America Standard Time (GMT-03:30) Newfoundland Newfoundland Standard Time (GMT-04:00) Manaus Central Brazilian Standard Time (GMT-04:00) Santiago Pacific SA Standard Time (GMT-04:00) Caracas, La Paz SA Western Standard Time (GMT-04:00) Atlantic Time (Canada) Atlantic Standard Time (GMT-05:00) Bogota, Lima, Quito, Rio Branco SA Pacific Standard Time (GMT-05:00) Indiana (East) US Eastern Standard Time (GMT-05:00) Eastern Time (US & Canada) Eastern Standard Time (GMT-06:00) Guadalajara, Mexico City, Monterrey Central Standard Time (Mexico) (GMT-06:00) Central America Central America Standard Time (GMT-06:00) Saskatchewan Canada Central Standard Time (GMT-06:00) Central Time (US & Canada) Central Standard Time (GMT-07:00) Chihuahua, La Paz, Mazatlan Mountain Standard Time (Mexico) (GMT-07:00) Arizona US Mountain Standard Time (GMT-07:00) Mountain Time (US & Canada) Mountain Standard Time (GMT-08:00) Tijuana, Baja California Pacific Standard Time (Mexico) (GMT-08:00) Pacific Time (US & Canada) Pacific Standard Time (GMT-09:00) Alaska Alaskan Standard Time (GMT-10:00) Hawaii Hawaiian Standard Time (GMT-11:00) Midway Island, Samoa Samoa Standard Time (GMT-12:00) International Date Line West Dateline Standard Time