Текущий архив: 2003.03.17;
Скачать: CL | DM;
Вниз
-= CBT Хук =- Найти похожие ветки
← →
elf_123 (2003-01-15 21:03) [0]Господа MASTAKи!
Помогите, пожалуйста с вопросом:
Я ставлю ЦБТ ХУК. Обрабатываю создание окон верхнего уровня.
Пишу их заголовки в файл:
...
assignfile(f,"log.log");
append(f);
writeln(f,tagCBT_CREATEWNDA(Pointer(lParam)^).lpcs.lpszName);
closeFile(f);
...
Но реакция на сиё у каждой проги своя, неожиданная. Калькулятор регистрирует ещё какое-то невидимое окно, ЭйСиДиСи сбивает мою прогу. А Корзина, Мои Док.., Мой Комп.. итд вовсе вызывают ошибку оболочки!
Как сделать нормальный логгер?
Заранее спасибо!
← →
UNIVERSAL (2003-01-24 14:52) [1]Ну чё разобрался с хуком? Вот мой код он тоже не работает может подскажешь в чём моя ошибка? В файл пишется только первое окно(по-моему первое).
function CBTProc(nCode : Integer; wParam, lParam: integer): LResult; stdcall;
var f:Text;
begin
if nCode >= 0 then
begin
if (nCode=HCBT_CREATEWND) then
if tagCBT_CREATEWNDA(Pointer(lParam)^).lpcs.hwndParent=0 then
begin
AssignFile(f,GetCurrentDir + "\createwnd.log");
{$I-}
Reset (F);
{$I+}
if IOResult <>0 then Rewrite(F);
Writeln(F,tagCBT_CREATEWNDA(Pointer(lParam)^).lpcs.lpszName);
CloseFile(F);
end;
Result:=CallNextHookEx(HookHandle , nCode, wParam, lParam);
Exit;
end
else Result := CallNextHookEx(HookHandle , nCode, wParam, lParam);
end;
procedure SetCBTHook(AListBox:TListBox);
begin
lb:=AListBox;
HookHandle := SetWindowsHookEx(WH_CBT,@CBTProc,HInstance,0);
if HookHandle =0 then LB.Items.Add("?? ??????? ????????? ???.")
else LB.Items.Add("??? ?????????. Handle=" + IntToStr(HookHandle));
end;
procedure RemoveCBTHook;
begin
UnhookWindowsHookEx(HookHandle);
LB.Items.Add("??? ????.");
end;
exports
SetCBTHook,
RemoveCBTHook;
begin
end.
← →
UNIVERSAL (2003-01-24 15:06) [2]Посмотри это - работает правильно.
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1043402432&n=5
Страницы: 1 вся ветка
Текущий архив: 2003.03.17;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.008 c