![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Я тут делаю Jokewar`ную прогу через Hook`и для клавиатуры. Я считываю состояние клавиш через GetKeyboardState. Мне нужно определённую кнопку "подменить" другой, например пользователь нажал "ч", а нажалось "ш". Как это можно организовать? Может лучше использовать что-то другое, а не GetKeyboardState. Видел, что-то похожее на дельфе, они там получали HWND через lParam(в функции хуков 3 параметра int, lparam, wparam) так: TMsg(Pointer(lParam)^).hwnd, как так сделать в MSVS я не знаю. Пробывал читать GetKeyboardState, а вписывать через SetKeyboardState, но ничего не получилось.
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
веашй обычный хук (WH_KEYBOARD).
и в его обработчике просто меняй wParam (virtual-key code) Добавлено @ 10:50 http://www.realcoding.net/article/view/182 -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Я менял, но мои изменения не сохраняются, т. е. продолжает печататься то что нажал. Я проверки вывожу мессагбоксом, там меняется, а в окошке не печатается. Как буд-то на wParam стоит const. Есть ещё методы?
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
ты цепочку продолжаеш?
в любом случае -- показывай код -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
0x07L |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Делал такую прогу месяц назад. Успешно.
|
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
OXOTHUK, делал похожую прогу с подменой ввода мышки, с клавой аналогично, если нужно могу выслать сорс, пиши в асю 135394514.
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Вот мой код(dll):
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
что-то я не заметил в коде изменения wParam...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
OXOTHUK, ты изменил локальную переменную wParam не более и вообще лучше по другому сделать, подавлять ввод вообще, а вместо него посылать свой при помощи SendInput.
-------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Sheff, А как подавить? И напишите примерчик на SendInput(никогда не имел дела), plz.
|
|||
|
||||
0x07L |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Знаю, что просили не меня, но все же:
1) Есть загвоздка: то, что мы шлем с помощью SendInput, тоже обрабатывается хуком. Для этого придумано спец. значение 666. 2) KeyStruct - это просто структура, которая может хранить скан-код и флажок Extended, а также два специальных значения. Одно из них я использую, если клавиша должна быть удалена, а не замещена. 3) KeyConfigMap - это тип (объявлен через typedef) std::map с нужными мне аргументами шаблона 4) KeyConfig - это глобальный объект типа KeyConfigMap, где хранится конфигурация - пары клавиш [клавиша, кот. заменить] - [клавиша, на кот. заменить] Как я уже сказал, вторая клавиша может иметь специальное значение (удалить). Каждый раз мы ищем нажатую клавишу в этой конфигурации 5) Еще загвоздка. Если нажат Alt - мы "отпускаем" его, посылая key up. Без этого будут глюки. Alt - вредная клавиша. С Ctrl и Shift все нормально. Если чего-то еще непонятно, спрашивай. Надеюсь, ты найдешь для себя здесь что-то полезное. Добавлено @ 18:19 Чуть не забыл: MapVirtualKey - это полезная стандартная функция. |
|||
|
||||
Sheff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 503 Регистрация: 25.3.2002 Где: Зеленоград Репутация: нет Всего: 3 |
Добавлено @ 18:26 OXOTHUK, похоже тебе уже всё написали добрые люди ![]() -------------------- -------------------------- Шеф всегда прав :) |
|||
|
||||
0x07L |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Кстати, это функция хука WH_KEYBOARD_LL
|
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
0x07L, А где объявлены(или описаны типы):
DeleteKey KeyStruct SpecialKey Running KeyConfigMap? Где можно подменить клавишу? (а то тут стоко всего) И у меня при компиляции, те переменные, которые объявлены в winuser.h(даже если он включен) говорит что андекларед инедтифаер. Глюк, что ли? |
|||
|
||||
0x07L |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: 4 Всего: 5 |
Это все мое
![]()
Виртуальные коды клавиш смотри в MSDN на страничке "Virtual-Key Codes". Код набирал здесь, поэтому за его работоспособность не ручаюсь. Еще. Я не тестил это на клавиатурах с медиа-клавишами (нет такой клавиатуры в наличии). Это сообщение отредактировал(а) 0x07L - 12.8.2006, 12:18 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |