Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование от Судьи [www.del5.da.ru] Выпуск от 19/05/2002 года


Информационный Канал Subscribe.Ru


- От Судьи -

 

- Основное месторасположение [http://del5.da.ru]

- Зеркало сайта [http://del50.by.ru]

- Mailto: [wadim274@permonline.ru]

 

Доброго времени суток, господа коллеги!

*****************************************

 

================================================================================

Отследить нажатия на клавиши во всей Windows

 

Чтобы отслеживать события клавиатуры во всей Windows, нудно поставить ловушку (hook). Для этого нужно создать dll, в которой определить три функции: создание ловушки, обработка события нажатия на клавишу и уничтожение ловушки. 
Это текст библиотеки (для ее создания выполните команду File | New, а в появившемся окне выберите dll).

library Key;
uses
WinTypes,
WinProcs,
Messages;

const
KeyEvent = WM_USER + 1;

var
HookHandle: hHook;

function KeyHook(Code: integer; WParam: word; LParam: Longint): Longint;
var
wnd: hWnd;
begin
if Code >= 0 then begin
wnd := FindWindow('TKeyForm', nil);
SendMessage(wnd, KeyEvent, wParam, lParam);
Result := 0;
end else
Result := CallNextHookEx(HookHandle, code, WParam, LParam);

end;

procedure SetKeyHook;
begin
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyHook, HInstance, 0);
end;

procedure DelKeyHook;
begin
if HookHandle <> 0 then
UnhookWindowsHookEx(HookHandle);
end;

exports
SetKeyHook index 1,
KeyHook index 2,
DelKeyHook index 3;

begin
end.

Ниже приведен код самой программы. Очень важно назвать главное окно KeyForm – иначе ничего не будет работать.


unit KeyUn;

interface

uses WinTypes, Messages, Forms, SysUtils;
const
KeyEvent = WM_USER + 1;

type
TKeyForm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure WM_NextMSG(var Msg: TMessage); message KeyEvent;
public
hLib: THandle;
end;

var
KeyForm: TKeyForm;

implementation
{$R *.DFM}

function SetKeyHook: Longint; external 'Key' index 1;
function KeyHook: Longint; external 'Key' index 2;
function DelKeyHook: Longint; external 'Key' index 3;


procedure TKeyForm.WM_NextMSG(var Msg: TMessage);
begin
beep;
end;

procedure TKeyForm.FormCreate(Sender: TObject);
begin
hLib := LoadLibrary('Key.dll');
SetKeyHook;
end;

procedure TKeyForm.FormDestroy(Sender: TObject);
begin
DelKeyHook;
FreeLibrary(hLib);
end;

end.

================================================================================

 

Новости нашего сайта:

В данный момент новостей нет...

Ссылки на дружественные сайты:

В данный момент нет никаких ссылок:

На последок:

- Анекдот

На приеме у сексопатолога:
- Доктор, мой муж импотент на все 200 процентов!
- Как так?! Ну на сто процентов я понимаю...
- Так оно и было, но вчера он запнулся и прикусил язык.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное