Delphi - Delphi | Помогите с клавиатурным Хуком!

Ответить
Аватара пользователя
SASHA 333

Delphi - Delphi | Помогите с клавиатурным Хуком!

Сообщение SASHA 333 »

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.
Аватара пользователя
Savant

Re: Delphi - Delphi | Помогите с клавиатурным Хуком!

Сообщение Savant »

SASHA 333

Гы, получилось. ЛОЛ получился... Изображение Изображение Изображение Изображение Изображение
Вложения
keyhook.zip
(2.8 КБ) 0 скачиваний
keyhook.zip
(2.8 КБ) 0 скачиваний
Ответить

Вернуться в «Программирование и базы данных»