Hello, Специально для Levitator\tpa (ну и кнешна всех остальных :-)) Проект Amirus (рабочее название). Вот то, что удалось насобирать за 2 месяца нашей работы: *1.* Переключение раскладок (по горячим клавишам). *1.1. задача:* переключение системной раскладки. *реализация:* системная функция SetKeyMapDefault(). *примечание:* раскладка должна быть предворительно загружена и оставаться в списке ресурса (keymap.resource) до холодного ребута. *1.2. задача:* переключения раскладки для потока I/O каждого shell окна. *реализация:* посылка запроса с командой CD_SETKEYMAP. *примечание:* необходимо иметь структуру IORequst, которая была создана и инициализирована для устройства console.device данного шелла. чтобы получить эту структуру нам придется запачкать системную функцию OpenDevice() и формировать список структур IORequest для каждого открытого console.device. необходимо также перегрузить функцию CloseDevice() для того , чтобы удалить из нашего списка уже не нужную структуру IORequest. *1.3. задача:* обеспечение механизма hotkey. *реализация:* добавляем в систему еще один обработчик событий ввода (inputhandler). он просматривает весь список событий ввода и сигнализирует (пробуждая) основную программу. *примечание:* обработчик имеет высокий приоритет оптимальное время исполнения. рассчитан на отслеживание от 1-й до 3-х клавиш. *2. *Структура программы. программа состоит из двух частей: основная(amirus) и установки(amirusprefs). *2.1.* основная программа. *задача:* переключение раскладки по горячим клавишам. *GUI: *программа не обладает интерфейсом. *2.1.1.* инициализация. *2.1.1.1.* чтение установок из иконки (ToolTypes) при запуске из WorkBench. CX_POPUP - для вызова установок. CX_POPKEY - для вызова установок. CX_PRIORITY - приоритет объекта broker(commodity). AMIRUS_PREFS - файл установок (перегружает установки из tooltypes) AMIRUS_KEYMAP - альтернативная раскладка по умолчанию (полный путь) AMIRUS_VISUAL - режим визуализации. AMIRUS_HOTKEY - комбинация горячих клавиш на переключение раскладки. AMIRUS_CONSOLE - вкл/откл режима переключения раскладки в shell-окне. *2.1.1.2.*чтение аргументов при запуске из CLI. (чтение установок из иконки, если это возможно. далее все установки аргументов пере гружает установки из tooltypes.) prefs - файл установок (перегружает все установки tooltypes) keymap - альтернативная раскладка по умолчанию (полный путь) visual - режим визуализации. hotkey - комбинация горячих клавиш на переключение раскладки. console - вкл/откл режима переключения раскладки в shell-окне. установки аргументов перегружают установки из файла. т.е. ToolTypes<-PrefsFile<-Arguments *2.1.1.3.* инициализация агента переключения раскладок (KeyMapSpy) происходит замена системных функций OpenDevice() и CloseDevice(). патч отслеживает открытие устройства console.device и формирует список структур IORequest. далее - инициализация inputhandler для отслеживания горячих клавишь. далее - инициализация объекта commodity. события commodity: CXCMD_DISABLE - приостановка работы inputhandler. CXCMD_ENABLE - возобнавление работы inputhandler. CXCMD_KILL - выход. CXCMD_APPEAR - запуск установок. CXCMD_DISAPPEAR - выход из установок (отмена). CXM_IEVENT - "newprefs" -═обновление системных установок. CXM_IEVENT - EVT_PREFS - обновление установок программы. *2.1.2.* основной цикл ожидания события от inputhandler и broker. *2.1.3. *завершение работы. диактивация inputhandler возвращение системной раскладки (также во всех shell) уничтожение агента KeyMapSpy (возвращение системных функций OpenDevice() и CloseDevice()) *2.2.* программа установок. вызывается основной программой по событию CXCMD_APPEAR либо повторным запуском основной программы, либо непосредственным запуском. место нахождения - SYSTEM:Prefs/ *задача:* обеспечить удобное управление параметрами работы основной программы. *GUI:* MUI или GadTools (выбор по tooltype AMIRUS_GUI) *2.2.1.* список доступных раскладок (путь "DEVS:KeyMaps/" ) *2.2.2.* тикущая альтернативная раскладка. вводится из активной записи списка либо непосредственно asl-запросом (полный путь). *2.2.3.* кнопки SAVE, USE, CANCEL USE-оповещение основной программы и передача установок непосредственно. SAVE-запись установок в файл и USE. CANCEL-безусловный выход. вот пожалуй и все. осталось сказать, что KeyMapSpy - модуль обеспечивающий управление (загрузка и переключение) раскладками.═он готов. также в его обязаности входит патч системных функций и формирование списка IORequest. 2Levitator\tpa: ты, как руководитель проекта сделай себе такой файл. где мы будем собирать подобную документацию. сам отредактируй (только не меняй, а дописывай) 2all: кто хочет что-то добавить, добавляйте! если есть необходимость, обговорим пункты отдельно. <sb> Bye! Waiting to reply, Vovka.