Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подмена кода клавиши

243
19 ноября 2004 года
pacific_7
1.9K / / 06.09.2004
Попытался подменить коды клавиш (интереса ради :)) - использовав функцию SetWindowsHookEx: по идее при выходе из функции на которую она подменяет обработчик сообщения WH_KEYBOARD производится возврат всех значений (взятых в начале параметров) посредством CallNextHookEx. Т.е. по логике вещей, если изменить эти параметры, то поменяется переданый в систему код клавиши - все просто. Но не работает! При этом в CallNextHookEx можно вернуть что угодно - хоть четыре нолика, все равно ноль эмоций! Зато если ее убрать, то клавиатура пропадает начисто - т.е. какой то эффект все же есть...
Где я ошибаюсь?
310
19 ноября 2004 года
fellow
853 / / 17.03.2003
Кажется, парматры в клавиатурный хук передаются по значению, а не по ссылке. Так что замена этих параметров к желаемому не приведёт.
301
19 ноября 2004 года
lord Kelvin
897 / / 08.11.2004
Возьми код клавиатурного шпиона (Ссылка на исходник на MS Visual Studio - http://www.uinc.ru/articles/zametki/001.shtml, или дельфийский найди - переведи), а там разберешься.
243
20 ноября 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by lord Kelvin
Возьми код клавиатурного шпиона (Ссылка на исходник на MS Visual Studio - http://www.uinc.ru/articles/zametki/001.shtml, или дельфийский найди - переведи), а там разберешься.


С чего ты думаешь я начал извращаться с этой функцией? Шпиона то я написал, и работает замечательно. А на счет того исходника - видел я его, давно еще видел, и подобные ему видел: есть в них общая черта - зачем то создается окно, в которое посылаются сообщения, ну и много других вещей непонятно для чего делается (непонятно наверно от того, что я не соображаю в VCpp).
Кстати для сравнения: "Основное приложение Оно очень простое. И состоит из одного файла" , и далее следует листинг на три экрана (без dll), а вот код моего приложения (понятно без dll):
//---------------------------------------------------------------------------
#include <vcl.h>

typedef void (*HWN)(HHOOK );
HWN hwn=NULL;

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HMODULE dllhook = LoadLibrary("a.dll");
if(dllhook)
{
hwn = (HWN)GetProcAddress(dllhook,"_hwnd");
HOOKPROC hook = (HOOKPROC)GetProcAddress(dllhook, "KeyboardProc");
if(hwn && hook)
{
HHOOK hhook = SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);
hwn(hhook);
Sleep(-1);
}
}
FreeLibrary(dllhook);
return 0;
}
//---------------------------------------------------------------------------

Ну люблю я похвастаться :).

Цитата:
Originally posted by fellow
Кажется, парматры в клавиатурный хук передаются по значению, а не по ссылке. Так что замена этих параметров к желаемому не приведёт.


Если параметры в хук передаются по значению, то тогда какой смысл в наличии параметров у функции CallNextHookEx? Ведь все равно ни фига не делают, кому они дальше тогда нужны и куда передаются?

310
20 ноября 2004 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by pacific_7
Если параметры в хук передаются по значению, то тогда какой смысл в наличии параметров у функции CallNextHookEx? Ведь все равно ни фига не делают, кому они дальше тогда нужны и куда передаются?


Так ты не путай божий дар с яичницей :)

Суди сам: твой хук получил управление и коды клавы, оценил ситуацию, сделал свои маленькие дела, затем всё то же самое передал следующему хуку, возможно, моему :). Мой сделал своё дело и отдал следующему. Когда все хуки отработают, система отдаст клавино сообщение в очередь приложения.

Клавин хук вовсе не обязан подменять коды. Хочешь подменить - изыми клавино событие и сформируй новое. Наверное, так

243
21 ноября 2004 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by fellow

Хочешь подменить - изыми клавино событие и сформируй новое. Наверное, так


Хм... Проверим на досуге. Спасибо за мысль.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог