ХУК клавиатуры, или как это делать?
От: Azz_Hell  
Дата: 13.02.07 15:10
Оценка:
Привет всем кто счёл нужным прочитать мою проблемку. Заранее благодарю тех кто ещё и сможет мне помочь.
Есть у меня библиотека ентого ХУКА, которая должна перехватывать нажатие клавиш от любой программы. Она это делает — перехватывает, и даже может об этом сообщить. Проблема в том что немогу я выдрать код той самой нажатой кнопочки, уж что я только не пробовал... Привожу текст той самой библиотеки ( в сокращении )

function Key_Hook(Code: integer; wParam: word;
lParam: Longint): Longint; export;
var
H: HWND;
begin
{если Code>=0, то ловушка может обработать событие}
if Code >= 0 then
begin
{это те клавиши?}
if ((wParam = VK_ADD)or(wParam = VK_SUBTRACT)) and (lParam and $40000000 = 0) then
begin
{ищем окно по имени класса и по заголовку}
H := FindWindow('TForm1', 'XXX');
{посылаем сообщение}
if wParam = VK_ADD then
SendMessage(H, wm_NextShow_Event, 0, 0)
else
SendMessage(H, wm_PrevShow_Event, 0, 0);
end;
{если 0, то система должна дальше обработать это событие}
{если 1 — нет}
Result:=0;
end
else
{если Code<0, то нужно вызвать следующую ловушку}
Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;

{при выгрузке DLL надо снять ловушку}
procedure LocalExitProc; far;
begin
if HookHandle<>0 then
begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;

{инициализация DLL при загрузке ее в память}
begin
{устанавливаем ловушку}
HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook, hInstance, 0);
if HookHandle = 0 then
MessageBox(0, 'Unable to set hook!', 'Error', mb_Ok)
else begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;
end.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.