Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Hook & Delphi7 [WinME, WinXP]


StAL ©   (2002-11-06 20:24:00) 

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


StAL   (2002-11-17 14:15:00) [1]

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


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

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


StAL   (2002-11-08 09:57:00) [3]

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

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-07 22:58:00) [4]

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


StAL   (2002-11-07 21:42:00) [5]

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


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

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


StAL   (2002-11-07 18:41:00) [7]

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


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

В генетике.


Наверх

Титульная страница Поиск, карта сайта Написать письмо