Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HOOk & DLL


bloodman ©   (2003-07-08 21:23:00) 

Здравствуйте МАСТЕРА! У меня такая проблема:
Нужно зарегить HOOK на события клавиатуры , который на ходится в dll.Я делаю так:

RegCreateKey(HKEY_CLASSES_ROOT,
"CLSID\{00000007-0003-0005-0409-000004370007}\InProcServer32", Reg);
RegSetValue(Reg, nil, REG_SZ, "hooker.dll", 10);
RegOpenKey(HKEY_LOCAL_MACHINE,
"Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad", Reg);
RegSetValueEx(Reg, "hooker", 0, REG_SZ,
PChar("{00000007-0003-0005-0409-000004370007}"), 38);
Перезагружаю компьютер.Хуки работают несколько секунд, а потом , по-моему, выгружаются из памяти(т.е. не работают).
В чем проблема?


3APA3A   (2003-07-10 17:34:00) [1]

Можно... работа с файлами возможна стандартными функциями... проверено...


R4D][   (2003-07-10 10:27:00) [2]

Хм... По-моему нельзя пользоваться pascalевскими функциями в коде библиотеки, попробуй заменить их на CreateFile, WriteFile, ReadFile и т.д. Или просто для теста сделай MessageBox. Просто непредвиденные глюки бывают при использовании стандартных pascalевских функций в библиотеке.


bloodman   (2003-07-09 21:04:00) [3]

Полный код при тесте у меня был такой:
function HookProc(Code: integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
begin
if not (Code=HC_ACTION) then
begin
Result:=CallNextHookEx(MyHook, code, wParam, lParam);
Exit;
end;
Assig"nFile(F, "c:\test.dat);
if OpenFile(PChar("c:\test.dat"), FStruct, OF_EXIST) = HFILE_ERROR then
ReWrite(F)
else Append(F);
GetLocalTime(STime);
WriteLn(F,"");
( F, "[", STime.wDay, ".", STime.wMonth, ".",
STime.wYear, " ", STime.wHour, ":", STime.wMinute, ":", STime.wSecond, "]"
)

Полный код при тесте у меня был такой:
function HookProc(Code: integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
begin
if not (Code=HC_ACTION) then
begin
Result:=CallNextHookEx(MyHook, code, wParam, lParam);
Exit;
end;
Assig"nFile(F, "c:\test.dat);
if OpenFile(PChar("c:\test.dat"), FStruct, OF_EXIST) = HFILE_ERROR then
ReWrite(F)
else Append(F);
GetLocalTime(STime);
WriteLn(F,"");
WriteLn(F, "[", STime.wDay, ".", STime.wMonth, ".",
STime.wYear, " ", STime.wHour, ":", STime.wMinute, ":", STime.wSecond, "]");
end;
А собственно какая разница , как я определял, главное что этот код работает несколько секунд , а потом не работает.


R4D][   (2003-07-09 19:35:00) [4]

А как ты тогда определил, что хуки работают несколько секунд если у тебя такая простенькая HookProc?


bloodman   (2003-07-09 19:25:00) [5]

var
MyHook: HHOOK;


function HookProc(Code: integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
begin
if not (Code=HC_ACTION) then
begin
Result:=CallNextHookEx(MyHook, code, wParam, lParam);
Exit;
end;
end;

begin
MyHook:=SetWindowsHookEx(WH_KEYBOARD, @HookProc, HInstance, 0);
end;


Spawn   (2003-07-09 18:16:00) [6]

Приведи код Хука


bloodman   (2003-07-09 16:30:00) [7]

Мастера помогите плз.


bloodman   (2003-07-08 23:00:00) [8]

Нет.


3APA3A   (2003-07-08 22:51:00) [9]

Может что-нибудь с callnexthook?


bloodman   (2003-07-08 22:36:00) [10]

Лучше подскажи как сделать, чтобы не выгружалась(работала).


3APA3A   (2003-07-08 22:34:00) [11]

Ясно... А насчет того, что они выгружаются из памяти - это можно проверить...


bloodman   (2003-07-08 22:25:00) [12]

Я так и делаю. В Dll стоит
KHook:=SetWindowsHookEx(WH_KEYBOARD, @KProc, HInstance, 0);
А код который выше нужен для того, чтобы библиотека грузилась и работала без программы (*.exe).


3APA3A   (2003-07-08 22:15:00) [13]

На самом деле. По моему гораздо проще и прозрачнее для программиста использовать SetWindowsHookEx... Пишешь dll-ку с процедурой hook-а и вешаешь ее на что хочешь с помощью этой процедуры...


AkaSaint   (2003-07-08 21:46:00) [14]

Я не большой специалист по хукам, просто когда-то интересовался. Почему ты не используешь вызовы WinAPI?


Наверх

Титульная страница Поиск, карта сайта Написать письмо