Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизSetWindowHookEx для всех потоков в системе. Найти похожие ветки
← →
KiberArt (2002-05-14 22:27) [0]Да SetWindowHookEx(...@KeyBoardProc...) работает, все OK, но только для потока моей проги. А я хочу для всех потоков. Сделал, вроде должно работать, а почему-то не работает. Ниже приведены мои исходники exe и dll. Наверное, как обычно, что-нибудь перепутал :) Может кто подскажет ошибку.
program Project1;
uses
Forms,Windows,
Unit1 in "Unit1.pas" {Form1};
{$R *.res}
var
hDll:THandle;
hook:HHOOK;
begin
Application.Initialize;
hDLL := LoadLibrary(PChar("KeySpyDll.dll"));
hook := SetWindowsHookEx(WH_KEYBOARD,GetProcAddress(hDLL,PChar("KeyboardProc")),hDLL,0);
Application.ShowMainForm := false;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
library MyDll;
uses
SysUtils,Windows;
{$R *.res}
function KeyboardProc(code:integer;WPARAM:wParam;LPARAM:lParam):integer;stdcall;
var f:system.text;
begin
//Чего мне надо
//result := CallNextHookEx(hook, code, wParam, lParam) - еще одна проблема
end;
end.
Насчет еще одной поблемы. Чтобы сработала CallNextHookEx, нужно первым параметром передать хэндл текущего хука, т.е. результат SetWindowsHookEx, как его передать в DLL?
← →
Fellomena (2002-05-15 12:20) [1]hook := SetWindowsHookEx(WH_KEYBOARD,GetProcAddress(hDLL,PChar("KeyboardProc")),hDLL,0); - ошибка;
SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance,0); - это делается в самой DLL, а не в коде проекта;
Очень рекомендую статью: "Hooks - аспекты реализации".
См. этот сайт или
http://www.delphikingdom.com/mastering/hook.htm
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.01 c