Быстрый поиск
Введите фрагмент названия статьи для поиска
Hotkey Helper 1.4
26.10.2023 | Категория: Мои программы | Автор: ManHunter
Скриншот программы Hotkey Helper
Небольшая программа-помощник для программистов. Показывает коды нажатых клавиш, значения параметров wParam и lParam сообщений WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_UNICHAR, WM_APPCOMMAND (мультимедийные клавиши), WM_DEADCHAR и WM_SYSDEADCHAR (умляуты, акуты, ударения и подобные модификаторы), результаты работы функций GetKeyState и GetAsyncKeyState с переключателями *Lock и клавишами-модификаторами, а также коды горячих клавиш из поля msctls_hotkey32, "сырой" ввод с клавиатуры и информацию о физических устройствах ввода. Предусмотрен режим работы с юникодом и ANSI. Программа написана для личных нужд, но может быть пригодится кому-нибудь еще.
Читать статью целиком »
Просмотров: 3227 | Комментариев: 30
Разделение ввода от нескольких клавиатур
23.09.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Разделение ввода от нескольких клавиатур
В одной из прошлых статей мы научились получать список всех устройств, реальных и виртуальных, которые используются для ввода. А можно ли каким-то образом разделять данные, полученные от разных источников? Например, к компьютеру подключены несколько клавиатур и надо определить, на какой именно клавиатуре была нажата клавиша. Ответ - да, можно. Приложение может подписаться на нужные устройства ввода при помощи функции RegisterRawInputDevices. При получении "сырого" ввода от каждого из устройств выбранного типа, система будет посылать приложению сообщение WM_INPUT, а приложению останется его правильно обработать.
Читать статью целиком »
Просмотров: 1516 | Комментариев: 8
Как получить список устройств ввода
26.06.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как получить список устройств ввода
Как узнать, подключена ли к компьютеру клавиатура и/или мышь? Ответить на этот вопрос можно путем перечисления всех подключенных системных устройств ввода при помощи функции GetRawInputDeviceList. Она позволяет получить список идентификаторов и типов устройств ввода, а на основании идентификатора при помощи функции GetRawInputDeviceInfo можно узнать об этом устройстве более детальную информацию.
Читать статью целиком »
Просмотров: 2204 | Комментариев: 10
Эмуляция нажатия мультимедийных клавиш на клавиатуре
18.06.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
В статье про обработку мультимедийных кнопок я немного коснулся эмуляции их нажатий. Там эмуляция была направлена напрямую в оболочку, сейчас же я расскажу, как выполнять такое действие полноценно, с учетом интересов всех запущенных приложений. Начнем с эмуляции пользовательского ввода с помощью функции SendInput.При всей моей любви к FASM, просто убивает скудность его инклудов. Похоже, что наполнение их данными остановилось на Win2000, а если захочется что-нибудь чуть новее, то все, добро пожаловать в MSDN. И хорошо, если структура окажется на пять-десять записей. Вот и сейчас нам придется самостоятельно описать структуру INPUT и обозначить коды мультимедийных клавиш.
Code (Assembler) : Убрать нумерацию
- struct MOUSEINPUT
- dx dd ?
- dy dd ?
- mouseData dd ?
- dwFlags dd ?
- time dd ?
- dwExtraInfo dd ?
- ends
- struct KEYBDINPUT
- wVk dw ?
- wScan dw ?
- dwFlags dd ?
- time dd ?
- dwExtraInfo dd ?
- ends
- struct HARDWAREINPUT
- uMsg dd ?
- wParamL dw ?
- wParamH dw ?
- ends
- struct INPUT
- type dd ?
- union
- mi MOUSEINPUT
- ki KEYBDINPUT
- hi HARDWAREINPUT
- ends
- ends
- INPUT_KEYBOARD = 1
- VK_VOLUME_UP = 0xAF
- VK_VOLUME_DOWN = 0xAE
- VK_LAUNCH_APP2 = 0xB7
Читать статью целиком »
Просмотров: 1620 | Комментариев: 2
Как узнать раскладку клавиатуры другого приложения
21.01.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня разберем, как можно узнать раскладку клавиатуры, которая активна в окне того или иного приложения. Также она может называться идентификатор языка ввода. С оконными приложениями все просто. Зная хэндл окна, через GetWindowThreadProcessId получаем идентификатор процесса, которому принадлежит исследуемое окно, а затем с помощью функции GetKeyboardLayout получаем код раскладки клавиатуры, которая активна в этом окне. Для консольных окон немного сложнее, так как они не реагируют на GetKeyboardLayout. Но это можно сделать при помощи недокументированной функции GetConsoleKeyboardLayoutName, которая возвращает код раскладки клавиатуры в виде строки. Просто так работать с консолью нельзя, для этого надо предварительно приаттачиться к процессу консольного окна, а после получения нужных данных отключиться от него.Code (Assembler) : Убрать нумерацию
- ; Получить активное окно
- invoke GetForegroundWindow
- ; Получить идентификатор процесса
- invoke GetWindowThreadProcessId,eax,pID
- mov ebx,eax
- ; Это консольное окно?
- invoke AttachConsole,[pID]
- or eax,eax
- jz .loc_gui
- .loc_console:
- ; Получить раскладку консольного окна
- invoke GetConsoleKeyboardLayoutName,buff
- or eax,eax
- jnz @f
- ; Не получилось, отключиться от консоли
- invoke FreeConsole
- ; Попробовать получить раскладку как у оконного приложения
- jmp .loc_gui
- @@:
- ...
- ; В buff строка с кодом раскладки типа "00000419"
- ...
- ; Просто отключиться от консоли
- invoke FreeConsole
- jmp .loc_done
- .loc_gui:
- ; Получить идентификатор раскладки клавиатуры
- invoke GetKeyboardLayout,ebx
- and eax,0xFFFF
- ...
- ; В EAX код раскладки
- ...
- .loc_done:
- ...
Читать статью целиком »
Просмотров: 1500 | Комментариев: 10