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

Вниз

вопросы по хукам   Найти похожие ветки 

 
Новенький в Делфи   (2002-10-15 15:30) [0]

вот исходник DLL

uses
Windows, sysutils;
const
MMFName: PChar = "KeyMMF";
type
PGlobalDLLData = ^TGlobalDLLData;
TGlobalDLLData = packed record
SysHook: HWND;
MyAppWnd: HWND;
end;

var
GlobalData: PGlobalDLLData;
MHandle: THandle;
WM_KEYHOOK: Cardinal;



function KeyboardProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
if code < 0 then
begin
Result:= CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Exit;
end;
if lPAram<0 then SendMessage(GlobalData^.MyAppWnd, WM_KEYHOOK, wParam, 0);
CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
Result:= 0;
end;



procedure hook(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch then
begin
GlobalData^.SysHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
GlobalData^.MyAppWnd:= hMainProg;
end else
begin
UnhookWindowsHookEx(GlobalData^.SysHook);
CloseGlobalData;
end
end;

procedure OpenGlobalData();
begin
WM_KEYHOOK:= RegisterWindowMessage("WM_KEYHOOK");
MHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
GlobalData:= MapViewOfFile(MHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
end;

procedure CloseGlobalData();
begin
UnmapViewOfFile(GlobalData);
CloseHandle(MHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH: OpenGlobalData;
DLL_PROCESS_DETACH: CloseGlobalData;
end;
end;

exports hook;

begin
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.


Когда работает программа, то всё нормально, когда запускаю другую свою рограмму, которая использует такую же dll, то после того как она поймала первую же клавишу, возникает ошибка Stak Overflow. ???

И ещё, как сделать что-то вроде фильтра, например человек в текстовом редакторе (блокнот к примеру) что-то пишет, и если нажимает на определённую клавишу, то эта клавиша не появляется.

Спасибо


 
Новенький в Делфи   (2002-10-15 19:58) [1]

..


 
Юрий Зотов   (2002-10-15 20:10) [2]

Код, вроде бы, нормальный, но есть одно подозрение. Уточните, что именно делает эта Ваша "другая" программа, получив сообщение WM_KEYHOOK.

Если ее действия приводят к посылке клавиатурного сообщения, то возникает бесконечная рекурсия (c итогом в виде Stack Overflow).



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

Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.032 c
6-78566
dimanew
2002-08-23 10:37
2002.10.24
Как получить IP своего компьютера?


14-78612
Artemkin
2002-10-03 11:47
2002.10.24
Плиз, подскажите где взять компоненту для работы с архивами.


8-78534
REaliSt
2002-06-23 04:44
2002.10.24
помогите с MS Agent!!


14-78606
Sergey13
2002-10-01 11:20
2002.10.24
Как думаете - попрутся наши вояки в Грузию или нет?


3-78289
ламир
2002-10-03 12:36
2002.10.24
хранимые процедуры в select e





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский