Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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);

Последний раз редактировалось ApxaHGe1, 08.12.2014 в 19:10.
Ответить с цитированием
  #2  
Старый 08.12.2014, 19:58
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Ну как без пиара посмотрите пжлст вот это, должно помочь и даже без внедрения перехватывающих библиотек
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
ApxaHGe1 (09.12.2014)
  #3  
Старый 08.12.2014, 20:48
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Твое приложение активное, там можно и без ДЛЛ
Ответить с цитированием
  #4  
Старый 08.12.2014, 21:01
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

google://CallNextHookEx
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
ApxaHGe1 (08.12.2014)
  #5  
Старый 08.12.2014, 21:20
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Благодарю за подсказку..
добавил в код ДЛЛ

result := CallNextHookEx(hhk, nCode, wParam, lParam);
и все в порядке)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025