четверг, 16 декабря 2010 г.

р-р-раз и готово! не надо при старте переключаться на русскую раскладку

некая программа при запуске автоматически переключается на русскую раскладку клавиатуры. в настройках программы нет возможности отменить эту кому-то и нужную фичу.

как настоящий ленивый пользователь сначала написал письмо авторам с пожеланием отключать это в настройках, но ответа не дождался.

вообщем как обычно, все приходится делать самому. немного пояснительного текста и много-много картинок



грузим в хиев, Enter (переход в режим кода), F8-F7 (просмотр импорта)


конечно же не помню как называется функция winapi, отвечающая за переключение раскладки, но наверняка в ней есть keyb, 
попросим хиев показать только те функции, названия которых содержит keyb - F9(фильтр)


всего 4 штуки, Get... вряд ли будут переключать, значит будем смотреть где вызывается LoadKeyboardLayoutW,


нажимаем Enter и хиев находит первый вызов, причем параметром идет 419(hex) = 1049(dec)  как раз russian (еще помню 409h это english)


поищем следующие вызовы через Ctrl-Enter... а следующих и нет:


классика жанра - условный переход заменить на безусловный, чтобы функция LoadKeyboardLayoutW не вызывалась никогда

F3(редактировать)

конечно, проще вбить EB на место 75 


но картинок просили больше, поэтому F2


jmps - сокращенная команда хиева от jmp short, 2 байта длиной как и исходная команда


Enter - Esc - F9 (записываем изменения) 

15 секунд и при старте никакого автоматического переключения раскладки клавиатуры нет.


6 комментариев:

  1. Полезная статейка. Как я всегда и говорю - для таких вещей не нужен ни отладчик ни ида, только старый добрый хиев :)

    ОтветитьУдалить
  2. Полностью поддерживаю! Основной минус Иды в том, что она умеет код только читать. Хиев же умеет равно читать и исправлять, быстро и без сложностей. Как было бы здорово научить Хиев понимать также много процессоров, как это делает Ида! Помню, как мы лет 5 назад исправляли глючивший ARM-драйвер в Windows Mobile путём побайтного редактирования: собирая команды из байтов вручную :))

    Великолепно, что сейчас Хиев поддерживает и ARM! Хочется также поддержки MIPS, SuperH, AVR и MCS 51.

    ОтветитьУдалить
  3. >>Великолепно, что сейчас Хиев поддерживает и ARM! Хочется также поддержки MIPS, SuperH, AVR и MCS 51.

    Не думаю, что это нужно! Понадобится еденицам, а автор убьет уйму своего времени, вместо того чтобы делать более значимые задачи: к примеру подсветить .NET-штукововины в бинаре ! ;)

    ОтветитьУдалить
  4. Хотя SEN-у нужно добавить аналог "процессорных" модулей как в ИДА, так любой желающий сможет добавить новый процессор

    ОтветитьУдалить
  5. глубоко сомневаюсь что такие желающие найдутся

    ОтветитьУдалить
  6. Красиво :) И полезно конечно же.

    ОтветитьУдалить