|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | Помогите с клавиатурным Хуком! |
|
Delphi - Delphi | Помогите с клавиатурным Хуком!
|
![]() Новый участник Сообщения: 35 |
Delphi5 WinXP
Я схватил за хвост сообщение о нажатии клавиши "S" на клавиатуре. Ну то есть с помощью библиотеки "hackpass.dll" я поймал сообщение о ее нажатии. Но мне этого мало. Надо, чтобы перехваченное сообщение умирало, то есть как будто клавиша "S" вообще не нажималась. Например при работе с блокнотом при нажатии на клавишу "S" ничего не писалось (в блокнот не приходило сообщение). Привожу текст библиотеки и юнита. Кто может - допишите пару строчек в библиотеку. //Это листинг библиотеки перехвата library hackpass; uses //Windows, Messages; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; var SysHook : HHook = 0; Wnd : Hwnd = 0; function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall; begin // Передать сообщение другим ловушкам в системе CallNextHookEx(SysHook, Code, wParam, lParam); // Проверяю сообщение if code = HC_ACTION then begin // Получаю идентификатор окна сгенерировавшего сообщение Wnd := TMsg(Pointer(lParam)^).hwnd; //ffo Если кликнули правой кнопкой // if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then ShowMessage('Щелчок правой'); //Работает //Если крутили среднюю // if TMsg(Pointer(lParam)^).message = wm_MOUSEWHEEL then ShowMessage('Крутнул среднюю'); //Работает //Перехват нажатия конкретной клавиши на клавиатуре if TMsg(Pointer(lParam)^).message =WM_KEYDOWN then //Работает case (TMsg(Pointer(lParam)^).wParam) of //Нашел этот пример и исковырял его под свои нужды перехвата мыши и клавы. //Берите кому надо - работает отлично. Да вот проблемку не могу решить. //Вот тут надо чтоб не ShowMessage выдавалось, а пойманное сообщение //умирало (убить его надо, чтоб оно дальше не пошло). //К примеру при моей запущенной проге в блокноте не будет писаться буква "S". //Утрирую конечно, но это чтоб понятно было чего хочу добиться. //Тут 83 - это цифровой идентификатор буквы "S" на клаве. 83: ShowMessage('Нажали клавишу "S" на клавиатуре');end; //84: ShowMessage('Нажали клавишу "T" на клавиатуре'); //85: ShowMessage('Нажали клавишу "T" на клавиатуре'); //86: ShowMessage('Нажали клавишу "U" на клавиатуре'); //87: ShowMessage('Нажали клавишу "V" на клавиатуре'); //88: ShowMessage('Нажали клавишу "W" на клавиатуре'); //89: ShowMessage('Нажали клавишу "X" на клавиатуре'); //90: ShowMessage('Нажали клавишу "Z" на клавиатуре'); end;//case end; end; // Процедура запуска. procedure RunStopHook(State : Boolean) export; stdcall; begin // Если State = true, то... if State=true then begin // Запускаем ловушку. SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0); end else// Иначе begin // Отключить ловушку. UnhookWindowsHookEx(SysHook); SysHook := 0; end; end; exports RunStopHook index 1; begin end. Unit1 //Это листинг Юнита, который использует эту библиотеку uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; procedure RunStopHook(State : Boolean) stdcall; external 'hackpass.dll' index 1; implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); begin RunStopHook(true); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin RunStopHook(false); end; end. |
|
Отправлено: 13:16, 16-01-2005 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать SASHA 333
Гы, получилось. ЛОЛ получился... ![]() ![]() ![]() ![]() ![]() |
Последний раз редактировалось Savant, 16-01-2005 в 16:20. Отправлено: 16:05, 16-01-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Помогите написать на Delphi маленькую программу! ИМХО, будет интересна многим! | AlexKan | Автоматическая установка Windows 2000/XP/2003 | 10 | 24-08-2006 19:48 | |
Delphi - Delphi | UpperCase на Delphi 7 | Cognolio | Программирование и базы данных | 3 | 26-01-2006 15:42 | |
Delphi - *Delphi* | Помогите в работе с реестром | Denhell | Программирование и базы данных | 2 | 09-07-2005 11:43 | |
Delphi - Помогите написать кейлогер на Delphi | Guest | Программирование и базы данных | 1 | 21-06-2004 01:50 | |
Delphi - помогите найти debuger для Delphi | elnurrr | Программирование и базы данных | 4 | 03-02-2004 17:20 |
|