Форум: "WinAPI";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c