среда, 1 мая 2013 г.

Свои действия на мультимедийные кнопки в Asus

По просьбе Олега Петушкова написал программу управления мультимедийными кнопками.
Проект вырос с проекта Мигаем подсветкой клавиатуры.
Программа заменяет C:\Program Files (x86)\ASUS\ATK Package\ATK Media\DMedia.exe
Чтоб все корректно работало DMedia.exe убрана из автозагрузки
Теперь о программе.
Возможности:

  1. Мигает подсветкой клавиатуры при приходе сообщения или поступления звонка Skype (Внимание! Microsoft прекращает поддержку Skype Desktop API т. о. данная функциональность может пропасть при установке новых версий Skype)
  2. Включает подсветку по расписанию
  3. Динамически подсвечивает клавиатуру когда нажимаете кнопки
  4. "Цветомузыка" - мигаем в такт музыке.
  5. Запускает 6 приложений кнопками FN+: Media(Instant key), 1, T, C, V и Enter цифровой клавиатуры (Настраивается)
  6. Посылает short cuts в программы указанные в списке.
  7. Имеет на каждую multimedia кнопку курсора 2 действия.   

Программа перехватывает все события посланные в DMedia от HControl и передает дальше в зависимости от настроек.
Установка:
  1. Установить программу из инсталляции.
  2. Настроить под свою программу (по умолчанию в списке присутствует управление VLC плейром).
 Настройка:
Управляемые программы ищутся по заголовку окна который определяется в поле "Title" с помощью regex 
Поле "Name" - просто имя программы(не несет функциональности)
Поле "Active" - использовать данное правило. (если галочка не стоит то обрабатываться не будет)
Поле "Post/Send" - использует разные методы работы с программой Send(галочка присутствует)  - посылает в активное окно нажатия кнопок, по этому окно которым управляем становится активным, Post посылает сообщения в любое окно и не делает это активным (нестабильно, использовать на свой страх и риск, может приводить к падению программ)
Поле "IfForeGround" - команды будут обрабатываться только если вы работаете в этом окне, окна помеченные этой галочкой обрабатываются в первую очередь.
Поле "RetToFront" -  возвращает в активность окно с которым вы работали перед нажатием кнопок, используется совместно с "Send"
Действия кнопок курсора программируются с помощью Keys Enumeration вписываем Member name кнопки через +. Пример CTRL+Left: ControlKey+Left
Кнопки поддерживают двойное быстрое нажатие таким образом можно запрограммировать 8 действий.
Скачать инсталляцию
Если есть баги(а они есть ;), то пишите)
02.05.2013 12:53 - новая версия исправил проблему со Скайпом. По идее если скайп не установлен, то теперь не будет вылетать, а только отключать функциональность мигания.
03.05.2013 - Пофиксил ошибки, спасибо Олегу Петушкову за помощь в тестировании и вылавливании ошибок.
05.05.2013 - Версия 2.0.2: В метод Post добавлена работа с кнопками alt, ctrl, shift
для окна определенного с помощью ".*" в Title события идут в текущие окно, таким образом можно делать глобальные short cuts. Мелкие исправления.
05.05.2013 - Версия 2.0.3: Добавил возможность запуска приложений с параметрами
Пример: открытия любимого сайта explorer.exe http://google.com
05.05.2013 - Версия 2.0.4: Теперь программа ест намного меньше памяти
07.05.2013 - Версия 2.0.5: "*." обрабатывается после окон помеченных "IfForeGround"
Добавлена в установку настройка для медиа кнопок и youtube.
12.05.2013 - Версия 2.0.6: Исправлена работа со Skype, убраны настройки youtube.
26.05.2013 - Версия 2.0.7: Добавлена автоматическое включение подсветки клавиатуры по времени, Добавлена динамическое включение подсветки, нажали на кнопку подсветка загорелась и через заданный промежуток потухла.
01.06.2013 - Версия 2.0.8: Добавлена "Цветомузыка" мигаем в такт музыке ;) Полезности ни какой, за то прикольно. Мелкие исправления и улучшения.
18.06.2013 - Версия 2.0.9: Много исправлений, меню в трее.
19.06.2013 - Версия 2.1.0: Исправление ошибок,  переименование проекта.
20.06.2013 - Версия 2.1.1: Добавлена функция Spark, устранена утечка памяти из-за SkypeApi.
02.11.2013 - Версия 2.2.1: Добавленна возможность на enter цифровой клавиатуры назначить своё приложение.
11.09.2014 - Подтверждена работа на ноутках Nx6, G550 и др.

Известные проблемы: При приходе сообщения не мигает - Skype API генерирует события после первых 2-х...4-х сообщений.

Примеры для Title:
.*VLC - ищет окно с названием в конце VLC
.* - любое окно

Примеры для кнопок:
для Alt + Ctrl + Shift + 2  вписываем LMenu+ControlKey+ShiftKey+D2

Пример запуска VLC:
"C:\Program Files\VideoLAN\VLC\vlc.exe" d:\music
Откроет VLC и проиграет музыку которая в d:\music


Скриншоты:

Если в окно Title ввести ".*", поставить галку на "Post/Send" и ввести в качестве горячих Up - MediaStop, Down - MediaPlayPause, Left - MediaPreviousTrack, Right - MediaNextTrack, то можно управлять приложением, поддерживающим клавиши мультимедиа, например Winamp


воскресенье, 17 марта 2013 г.

Мигаем подсветкой клавиатуры

Дело было вечером, делать было нечего. Купил я как то ноут Asus N56VM, в нем есть подсветка клавиатуры и подумалось мне, что просто подсветка это не интересно.
Что можно сделать с подсветкой? - Правильно! Помигать!
Вот и взялся я посмотреть как включается подсветка. После некоторых поисков, локализовал управление подсветкой с помощью клавиатуры в "C:\Program Files (x86)\ASUS\ATK Package\ATK Hotkey\HControl.exe". После дебагинка в IDA были найдено следующие:
что подсветка включалась - выключалась с помощью вызова DeviceIoControl с определенными параметрами. В результате была написана функция включения и регулировки подсветки.
        public static int GetLevel()
        {
            return Level(0, 0x424B4C47);
        } 
        public static int SetLevel(int level)
        {
            return Level(level, 0x424B4C53);
        }
        public static int Level(int level, int code)
        {
            byte[] outBuffer = new byte[0x300];
            int[] inBuffer = new int[6] { 2, 0, 1, 8, 0x040000, 0x80 };
            inBuffer[1] = code;
            inBuffer[5] = level | 0x80;
            bool result = false;
            int bytesReturned = 0;
            SafeFileHandle _hdev = new SafeFileHandle(CreateFile("\\\\.\\ATKACPI", 0xC0000000, 3, IntPtr.Zero, 3, 0, IntPtr.Zero), true);
            if (_hdev.IsClosed | _hdev.IsInvalid)
            {
                WarningMessage("Error opening device");
                return -1;
            }
            unsafe
            {
                fixed (byte* p1 = &outBuffer[0])
                {
                    fixed (int* p = &inBuffer[0])
                    {
                        result = DeviceIoControl(_hdev, 0x00222404, (IntPtr)p, 0x18, (IntPtr)p1, 0x300, out bytesReturned, IntPtr.Zero);
                    }
                }
            }
            if (result == false)
            {
                int error_code = Marshal.GetLastWin32Error();
                WarningMessage("error code: " + error_code);
                return -1;
            }
            if (code == 0x424B4C47)
            {
                return outBuffer[0x10];
            }
            return level;
        }
 Консольную утилиту для регулировки и мигания подсветки для Asus Nx6 можно скачать тут

 Но просто мигать подсветкой не интересно, по этому после непродолжительного изучения SkypeAPI была написана программа  которая мигает подсветкой при приходе сообщения или поступления звонка. Программа висит в трее и позволяет регулировать подсветку и мигает при событии от skype. Инсталляция убрана в связи с не актуальностью.
Программа работает на серии ноутбуков Asus Nx6  при установленном Skype.

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

14.04.3013 Добавлена возможность запускать свои приложения при нажатии fn+ 1, V, C


GPS в Asus P525

Сейчас все смартфоны имеют встроенный GPS, a вот раньше, 6 лет назад, не в каждом он был.
Захотелось мне как то встроить в свой старый девайс GPS модуль.
И так имеем GPS GTPA010(FGPMMOPA6B) модуль купленный на ebay, имеет на борту UART и USB 
В Asus p525 используется IRDA модуль TFBS4711, который нужно удалить, т. к. нам нужен свободный UART.
Приступаем:
1. Сдуваем паяльным феном технический разъем он будет мешать, собрать потом телефон, на месте разъема будет GPS модуль. 

2. Сдуваем паяльным феном модуль IRDA , он нам уже не нужен, 
и подпаиваем 
тонкие проводки там где был модуль IRDA для соединения с GPS.


 
3. Подпаиваем следующие 2 - TXD(вход IRDA), 3 - RXD(выход IRDA), 4- сигнал включения 
и соединяем c GPS модулем 
IRDA - GPS 
3(RXD) - 9(TX) 
2(TXD) - 10(RX) 
4(SD) - 2 (ENABLE)


4. Рядом со светодиодом зарядки я припаял еще один светодиод (SMD очень мелкий) один вывод на землю (-) другой через 330 Ом на 
вывод 5 (3D-FIX) GPS модуля, он показывает состояние GPS.

5. Рядом с модулем расположил ионистор(старый я выпаял) соединив его проводом с выводом где раньше был старый ионистор и 4 (VBACKUP) выводом GPS модуля. Землю для ионистора и модуля взял тут же на плате. 
Плюс (+) для питания брал, показал красной стрелкой на фотографии.
 
Ну вот в принципе и все, с железом 
 
Но как оказалось этого мало чтоб GPS реально заработал т. к. драйвер порта работал с протоколом IRDA, а нам нужны чистые данные на выводах.
Вот тут засада и началась.  Нужен был драйвер которые не оборачивает данные в IRDA протокол. Пришлось патчить родные драйвера с помощью IDA и Assembler. Скачать драйвер можно на форуме ссылка 
приведена ниже. Так же для данного модуля написал загрузку EPO для WM, для быстрого поиска спутников.
Итог: GPS работает на com4, Навител работает отлично. 

PS: Можно подключить не только GPS модуль но и почти любое устройство с последовательным портом и управлять данными с девайса 

Форум