25.08.2011, 09:48
|
|
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
Цитата:
Сообщение от Stasonix
я сам знаю что клавиатурный хук надо использовать, но кода не знаю?
|
ну давай я за тебя напишу...
библиотека ловушки:
Код:
library Hook;
uses
Windows, Messages;
type
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
PBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
const
WH_KEYBOARD_LL: Integer = 13;
var
hCallWndProc: HHOOK = 0;
function LowLevelKeyboardProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if code>=0 then
begin
if (wParam=WM_KEYDOWN) then
case PBDLLHOOKSTRUCT(lParam).vkCode of
VK_LCONTROL, VK_RCONTROL: SendMessage(FindWindow('TForm1', 'Form1'), WM_APP+$100, 0, 0);
end;
end;
Result:=CallNextHookEx(0, code, wParam, lParam)
end;
procedure SetHook();
begin
hCallWndProc:=SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, HInstance, 0);
end;
procedure UnSetHook();
begin
if hCallWndProc<>0 then UnhookWindowsHookEx(hCallWndProc);
end;
exports
SetHook, UnSetHook;
begin
end.
модуль самой программы:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMAPP100(var Msg: TMessage); message WM_APP+$100;
end;
var
Form1: TForm1;
procedure SetHook(); external 'Hook.dll';
procedure UnSetHook(); external 'Hook.dll';
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetHook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnSetHook;
end;
procedure TForm1.WMAPP100(var Msg: TMessage);
begin
Memo1.Lines.Add('ctrl');
end;
end.
вот здесь я уже показывал как такое делать)
__________________
Пишу программы за еду.
__________________
|