Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | Помогите с клавиатурным Хуком!

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

Аватара для SASHA 333

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: hasherfrog
Дата: 16-01-2005
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

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip keyhook.zip
(2.8 Kb, 38 просмотров)

SASHA 333
Гы, получилось. ЛОЛ получился...

Последний раз редактировалось Savant, 16-01-2005 в 16:20.


Отправлено: 16:05, 16-01-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | Помогите с клавиатурным Хуком!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите написать на 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




 
Переход