Форум: "Система";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизHOOk & DLL Найти похожие ветки
← →
bloodman (2003-07-08 21:23) [0]Здравствуйте МАСТЕРА! У меня такая проблема:
Нужно зарегить 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);
Перезагружаю компьютер.Хуки работают несколько секунд, а потом , по-моему, выгружаются из памяти(т.е. не работают).
В чем проблема?
← →
AkaSaint (2003-07-08 21:46) [1]Я не большой специалист по хукам, просто когда-то интересовался. Почему ты не используешь вызовы WinAPI?
← →
3APA3A (2003-07-08 22:15) [2]На самом деле. По моему гораздо проще и прозрачнее для программиста использовать SetWindowsHookEx... Пишешь dll-ку с процедурой hook-а и вешаешь ее на что хочешь с помощью этой процедуры...
← →
bloodman (2003-07-08 22:25) [3]Я так и делаю. В Dll стоит
KHook:=SetWindowsHookEx(WH_KEYBOARD, @KProc, HInstance, 0);
А код который выше нужен для того, чтобы библиотека грузилась и работала без программы (*.exe).
← →
3APA3A (2003-07-08 22:34) [4]Ясно... А насчет того, что они выгружаются из памяти - это можно проверить...
← →
bloodman (2003-07-08 22:36) [5]Лучше подскажи как сделать, чтобы не выгружалась(работала).
← →
3APA3A (2003-07-08 22:51) [6]Может что-нибудь с callnexthook?
← →
bloodman (2003-07-08 23:00) [7]Нет.
← →
bloodman (2003-07-09 16:30) [8]Мастера помогите плз.
← →
Spawn (2003-07-09 18:16) [9]Приведи код Хука
← →
bloodman (2003-07-09 19:25) [10]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;
← →
R4D][ (2003-07-09 19:35) [11]А как ты тогда определил, что хуки работают несколько секунд если у тебя такая простенькая HookProc?
← →
bloodman (2003-07-09 21:04) [12]Полный код при тесте у меня был такой:
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-10 10:27) [13]Хм... По-моему нельзя пользоваться pascalевскими функциями в коде библиотеки, попробуй заменить их на CreateFile, WriteFile, ReadFile и т.д. Или просто для теста сделай MessageBox. Просто непредвиденные глюки бывают при использовании стандартных pascalевских функций в библиотеке.
← →
3APA3A (2003-07-10 17:34) [14]Можно... работа с файлами возможна стандартными функциями... проверено...
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.229 c