Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
7-71988
SZap
2003-07-09 18:38
2003.09.22
Работа с LPT портом


1-71572
Globus
2003-09-09 21:08
2003.09.22
SOS ! Не работает raise Exception.Create( Сообщение )


1-71695
Denizzz
2003-09-11 09:42
2003.09.22
Где скачать документацию?


7-71990
Rolf
2003-07-09 21:44
2003.09.22
CD-ROM


7-71972
Ozone
2003-07-08 09:53
2003.09.22
Рисование на рабочем столе





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