Показать сообщение отдельно
  #1  
Старый 08.12.2014, 19:08
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию Hook клавиатуры

Добрый день, есть приложение, написанное в делфи, оно свернуто, есть другое приложение, оно активно, мне нужно перехватить хажатие нескольких клавиш, а именно ctrl, chift, delete, insert

Так как хук для меня далекая тема, в интернете нашел код

Код:
var
 g_hhk: HHOOK;
 State : TKeyboardState;

function GetSupport(nCode: Integer; wParam: wParam; lParam: lParam ): LParam; stdcall;
var
wnd:HWND;
begin
wnd:=FindWindow(nil,'ActiveWindow');
GetKeyboardState(State);
if ((State[vk_Control] And 128) <> 0) then
begin
SendMessage(wnd, WM_KEYDOWN, VK_F1, 0);
SendMessage(wnd, WM_KEYUP, VK_F1, 0);
end;

if ((State[vk_SHIFT] And 128) <> 0) then
begin
SendMessage(wnd, WM_KEYDOWN, VK_F2, 0);
SendMessage(wnd, WM_KEYUP, VK_F2, 0);
end;

if ((State[vk_INSERT] And 128) <> 0) then
begin
SendMessage(wnd, WM_KEYDOWN, VK_F3, 0);
SendMessage(wnd, WM_KEYUP, VK_F3, 0);
end;

if ((State[vk_DELETE] And 128) <> 0) then
begin
SendMessage(wnd, WM_KEYDOWN, VK_F4, 0);
SendMessage(wnd, WM_KEYUP, VK_F4, 0);
end;

end;



exports
 GetSupport;
begin
end.

Код вроде рабочий, когда нажимаю нужные клавишы, идет посылка нажатий в другое окно, НО ЕСТЬ ОДНО НО!!!!
ни какие другие клавиши не работают, т.е. печатать какой то текст, я уже не могу в других окнах, помогите этого избежать

Вызываю код из DLL таким образом
Код:
button1.click
  hinstDLL := LoadLibrary('Support.dll');
  hkprcKeyboard := GetProcAddress(hinstDLL, 'GetSupport');
  SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);
Ответить с цитированием