Подмена кода клавиши
Где я ошибаюсь?
Возьми код клавиатурного шпиона (Ссылка на исходник на 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;
}
//---------------------------------------------------------------------------
Ну люблю я похвастаться :).
Кажется, парматры в клавиатурный хук передаются по значению, а не по ссылке. Так что замена этих параметров к желаемому не приведёт.
Если параметры в хук передаются по значению, то тогда какой смысл в наличии параметров у функции CallNextHookEx? Ведь все равно ни фига не делают, кому они дальше тогда нужны и куда передаются?
Если параметры в хук передаются по значению, то тогда какой смысл в наличии параметров у функции CallNextHookEx? Ведь все равно ни фига не делают, кому они дальше тогда нужны и куда передаются?
Так ты не путай божий дар с яичницей :)
Суди сам: твой хук получил управление и коды клавы, оценил ситуацию, сделал свои маленькие дела, затем всё то же самое передал следующему хуку, возможно, моему :). Мой сделал своё дело и отдал следующему. Когда все хуки отработают, система отдаст клавино сообщение в очередь приложения.
Клавин хук вовсе не обязан подменять коды. Хочешь подменить - изыми клавино событие и сформируй новое. Наверное, так
Хочешь подменить - изыми клавино событие и сформируй новое. Наверное, так
Хм... Проверим на досуге. Спасибо за мысль.