Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2010, 13:16   #1
Умед
 
Регистрация: 23.07.2010
Сообщений: 5
По умолчанию Хук

Есть хук:

----------------

Код:
library HookDll;


uses
  SysUtils,
  Classes,windows;

var CurrentHook: HHook;
function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
 var
   Inp: TInput;
   I: Integer;
begin

    if code<0 then begin
       GlobalKeyBoardHook:=CallNextHookEx(CurrentHook,code,wParam,lparam);
       Exit;
    end;
    if wParam=VK_INSERT then
		begin
     Inp.Itype := INPUT_KEYBOARD;
     Inp.ki.wVk := Ord(UpCase('A'));
     Inp.ki.dwFlags := 0;
     SendInput(1, Inp, SizeOf(Inp));
    end;


    CallNextHookEx(CurrentHook,code,wParam,lparam);
    GlobalKeyBoardHook:=0;
    Exit;
end;


procedure SetHookHandle(HookHandle: HHook); stdcall;
begin
    CurrentHook:=HookHandle;

end;

exports GlobalKeyBoardHook index 1,
        SetHookHandle index 2;
begin

end.

Вроде при нажатии Insert должно вводиться одна буква А, но их каждый раз вводиться два.
Подскажите в чем проблема?

Последний раз редактировалось Stilet; 23.07.2010 в 13:21.
Умед вне форума Ответить с цитированием
Старый 23.07.2010, 13:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может быть потому что хук учитывает не жмак поклавиши, а нажатие-отжатие, воти получается: Нажал ты клавишу - сработал хук, отжал ее - опять сработал (это предположение)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.07.2010, 13:24   #3
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Дело в том, что GlobalKeyBoardHook выполняется два раза: при нажатии и при отпускании клавиши... Я исправлял так:
var tmp:longword;
....
tmp:=lParam shr 30;
if ((tmp and 1)=0) then //Сработает при нажатии на кнопку.
begin
//Ваш код
end;

Если написать if ((tmp and 1)=1) then - сработает при отпускании кнопки
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 23.07.2010, 13:49   #4
Умед
 
Регистрация: 23.07.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Impuls1989 Посмотреть сообщение
Дело в том, что GlobalKeyBoardHook выполняется два раза: при нажатии и при отпускании клавиши... Я исправлял так:
var tmp:longword;
....
tmp:=lParam shr 30;
if ((tmp and 1)=0) then //Сработает при нажатии на кнопку.
begin
//Ваш код
end;

Если написать if ((tmp and 1)=1) then - сработает при отпускании кнопки
Спасибо за ответ!
Умед вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хук и потоки Murzilka153 Общие вопросы C/C++ 0 16.10.2009 11:59
Сервис и хук francyz26rus Win Api 0 19.08.2009 13:51
Хук на комбинацию W0LF Win Api 9 26.07.2009 10:33
Хук на клаву HellMercenaries Общие вопросы Delphi 3 23.07.2009 21:23
хук rpy3uH Win Api 0 30.10.2006 20:47