Главная страница
    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.012 c
8-71769
ummax
2003-05-21 15:30
2003.09.22
TWaveHeader = record


7-71962
evg12
2003-06-28 05:15
2003.09.22
Серийный номер HDD


3-71504
Andrew
2003-09-01 09:07
2003.09.22
Отчет для Fox-таблиц. Поле типа N;10;0


6-71802
Jonni_M
2003-07-24 18:04
2003.09.22
IdPOP3 или NMPOP3 что лучше использовать


3-71564
Relaxxx
2003-08-27 16:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский