Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Как узнать раскладку клавиатуры другого приложения

21.01.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня разберем, как можно узнать раскладку клавиатуры, которая активна в окне того или иного приложения. Также она может называться идентификатор языка ввода. С оконными приложениями все просто. Зная хэндл окна, через GetWindowThreadProcessId получаем идентификатор процесса, которому принадлежит исследуемое окно, а затем с помощью функции GetKeyboardLayout получаем код раскладки клавиатуры, которая активна в этом окне. Для консольных окон немного сложнее, так как они не реагируют на GetKeyboardLayout. Но это можно сделать при помощи недокументированной функции GetConsoleKeyboardLayoutName, которая возвращает код раскладки клавиатуры в виде строки. Просто так работать с консолью нельзя, для этого надо предварительно приаттачиться к процессу консольного окна, а после получения нужных данных отключиться от него.
  1.         ; Получить активное окно
  2.         invoke  GetForegroundWindow
  3.         ; Получить идентификатор процесса
  4.         invoke  GetWindowThreadProcessId,eax,pID
  5.         mov     ebx,eax
  6.  
  7.         ; Это консольное окно?
  8.         invoke  AttachConsole,[pID]
  9.         or      eax,eax
  10.         jz      .loc_gui
  11.  
  12. .loc_console:
  13.         ; Получить раскладку консольного окна
  14.         invoke  GetConsoleKeyboardLayoutName,buff
  15.         or      eax,eax
  16.         jnz     @f
  17.  
  18.         ; Не получилось, отключиться от консоли
  19.         invoke  FreeConsole
  20.         ; Попробовать получить раскладку как у оконного приложения
  21.         jmp     .loc_gui
  22. @@:
  23.         ...
  24.         ; В buff строка с кодом раскладки типа "00000419"
  25.         ...
  26.  
  27.         ; Просто отключиться от консоли
  28.         invoke  FreeConsole
  29.         jmp     .loc_done
  30.  
  31. .loc_gui:
  32.         ; Получить идентификатор раскладки клавиатуры
  33.         invoke  GetKeyboardLayout,ebx
  34.         and     eax,0xFFFF
  35.         ...
  36.         ; В EAX код раскладки
  37.         ...
  38. .loc_done:
  39.         ...
Если все прошло нормально, то у нас будет или числовой код раскладки, или строка с кодом раскладки, из которой этот код можно легко извлечь. Конечно, пользователю правильнее будет показывать не просто набор цифр, а человекопонятные названия раскладки. Соответствие кодов раскладок названиям языков можно посмотреть в MSDN, а можно переложить эту задачу на систему и воспользоваться функцией VerLanguageName или GetKeyboardLayout с флагом LOCALE_SLANGUAGE.

Читать статью целиком »
Просмотров: 632 | Комментариев: 10

Добавляем вкладки в Проводник Windows

19.01.2020 | Категория: Software | Автор: ManHunter

Добавляем вкладки в Проводник Windows

Очередная улучшалка для любителей стандартного Проводника Windows - программа Clover. Она добавляет в окно Проводника вкладки, внешне напоминающие вкладки в браузере Chrome. Таким образом в одном окне Проводника может быть одновременно открыто несколько папок. Поддерживаются версии от Windows XP до Windows 10 всех разрядностей. Также программа Clover совместима с другими системными надстройками, например, с Classic Shell.

Читать статью целиком »
Просмотров: 1583 | Комментариев: 8

Список ошибок обновления Windows

10.01.2020 | Категория: Software | Автор: ManHunter

Список ошибок обновления Windows

Как я уже неоднократно говорил, система Windows очень неинформативна, когда дело касается описания ошибок. Обычно в лог или в диалоговое окно просто выводится числовой код ошибки, по которому нереально определить, что же вообще произошло. Приходится лазить в гуглояндексы, шерстить MSDN в поиске хоть какой-то информации, связанной с этим кодом. Здесь я выкладываю коды ошибок с их строковыми представлениями и, по возможности, с человекопонятным описанием. За основу взята табличка с сайта winitpro.ru, за что им большое спасибо. Всякую ерунду я почистил, оставил только более-менее значимую информацию. Сразу предупреждаю, что даже в таком виде без определенных навыков воспользоваться ей будет сложно, но хотя бы будет примерно понятно, в какую сторону направлять поиски.

Читать статью целиком »
Просмотров: 1160 | Комментариев: 12

Отслеживание изменения системного времени

23.12.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter

Отслеживание изменения системного времени

Если ваша программа работает с системным временем, то хорошей практикой будет возможность отслеживать факт его изменения. Это может быть как ручное изменение настроек даты и времени через Панель управления, так и программное изменение времени функциями типа SetSystemTime или SetLocalTime, сути не меняет. Соответственно, при наступлении такого события ваша программа должна переустановить какие-то свои внутренние таймеры, проконтролировать и пересчитать интервалы между процессами и т.п.

Читать статью целиком »
Просмотров: 806 | Комментариев: 0

Uptime 1.1

13.11.2019 | Категория: Мои программы | Автор: ManHunter

Скриншот программы Uptime

Uptime - маленькая консольная программа, показывающая время аптайма системы - время, прошедшее с момента ее старта. Облегченный аналог linux-утилиты.

Ключи запуска:
-p - показать аптайм системы в словесном формате
-s - показать время старта системы в формате YYYY-MM-DD HH:MM:SS

Информация выводится на stdout, поэтому может перенаправляться стандартными средствами. Программа была написана для личных нужд, но может быть пригодится кому-нибудь еще.

Читать статью целиком »
Просмотров: 1885 | Комментариев: 14

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 3 (0.0483 сек.) / Память: 4.75 Mb
Наверх