Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.02;
Скачать: CL | DM;

Вниз

Hook & Delphi7   Найти похожие ветки 

 
StAL ©   (2002-11-06 20:24) [0]

Если перекомпилировать на D7 ДЛЛ с хуком, хоть пример из статьи "Аспекты реализации хуков", все после его запуска подвисает, и то иногда.
В чем проблема?


 
Набережных С.   (2002-11-06 23:14) [1]

В генетике.


 
StAL ©   (2002-11-07 18:41) [2]

В правилах форума, насколько мне известно, запрещено наносить личные оскорбления.


 
Набережных С.   (2002-11-07 18:57) [3]

StAL © (07.11.02 18:41)
Любопытно, в чем Вы усматриваете личное оскорбление?


 
StAL ©   (2002-11-07 21:42) [4]

>> В генетике.
Если я не так понял, извините.
С ув. Алексей


 
Набережных С.   (2002-11-07 22:58) [5]

>StAL © (07.11.02 21:42)
На мой взгляд, оскорбительна формулировка вопроса. Автор не счел нужным привести какую-либо информацию - хотя бы для того, чтобы убедится, что он правильно использует указанные примеры, а в подавляющем большинстве случаев причина именно в этом. Но, видимо, автор уверен в собственной непогрешимости, виноваты же другие - авторы примеров, Borland, Гейтс... Ну а в условиях недостатка информации остается только строить предположения, и, на мой взгляд, мое ничем не хуже любого другого.


 
StAL ©   (2002-11-08 09:57) [6]

Хорошо, вот библиотека:

library DLL;

uses
Windows, Messages;

const
MapID = "Global Hook Demo";

type
PData = ^TData;
TData = record
AppWnd: HWND;
OldHook: HHOOK
end;

var
HMap: THandle = 0;
Data: PData = nil;

procedure DLLEntryPoint(dwReason: DWORD); stdcall;
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
HMap := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TData), MapID);
Data := MapViewOfFile(HMap, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TData))
end;
DLL_PROCESS_DETACH:
begin
UnMapViewOfFile(Data);
CloseHandle(HMap)
end
end
end;

function ShellHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT; stdcall;
begin
if Code in [HSHELL_WINDOWCREATED, HSHELL_WINDOWDESTROYED, HSHELL_REDRAW] then
SendMessage(Data^.AppWnd, WM_USER, ParamW, Code);
Result := CallNextHookEx(Data^.OldHook, Code, ParamW, ParamL)
end;

function SetShellHook(Wnd: HWND): BOOL; stdcall;
begin
if Data <> nil then
begin
Data^.AppWnd := Wnd;
Data^.OldHook := SetWindowsHookEx(WH_SHELL, @ShellHook, HInstance, 0);
Result := Data^.OldHook <> 0
end
else Result := False
end;

function RemoveShellHook: BOOL; stdcall;
begin
Result := UnhookWindowsHookEx(Data^.OldHook)
end;

exports
SetShellHook,
RemoveShellHook;

begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH)
end.


Если компилировать ее на Delphi6, то все нормально, а если на Delphi7, то все подвисает.
Помогите пожалуйста.
С ув. Алексей.


 
Набережных С.   (2002-11-08 10:33) [7]

Сравни описание импортированных функций в D6 и в D7. Но это так, на всякий случай. Попробуй заменить SendMessage на PostMessage, или вообще ее закомментировать. Если при этом зависание исчезнет, то проблема в приложении, которому ты отправляешь сообщение. И замени WM_USER на что-нибудь понадежней, типа WM_USER + 471, а еще лучше используй RegisterWindowMessage.


 
StAL ©   (2002-11-17 14:15) [8]

Попробую, спасибо.
Но по-моему тут с MMF что-то не то.
Это ИМХО.
Спасибо.
С ув. Алексей



Страницы: 1 вся ветка

Текущий архив: 2003.01.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
14-1864
Supreme
2002-12-10 17:50
2003.01.02
Как работают архиваторы?


3-1751
Сергей
2002-12-11 14:17
2003.01.02
пример программной настройки опций безопасности в MSDE?


1-1827
MFV
2002-12-21 00:17
2003.01.02
Собственный объект для вставки в Word


3-1758
adogg
2002-12-11 13:34
2003.01.02
Проблема с ADOQuery и MS Access


14-1858
Сергей Макаров
2002-12-12 10:56
2003.01.02
Помогите с задачкой.