Пример обратного вызова DLL. Вариант 2
|
Обратный вызов (callback) для NotifyRegister должен находиться в DLL. Вам не нужен MakeProcInstance, просто добавьте "export" к объявлению функции. Нижеследующий код является простым примером DLL для Delphi. Вы должны запустить все тесты вне Delphi или же ваша программа не получит никаких уведомлений (notifications). Все это выглядит похожим на Delphi, зарегистрировавшей перехват с Toolhelp... Library Lib1;
Uses WinTypes, Messages, WinProcs, Toolhelp;
Const WM_NOTIFY = WM_USER+$100;
Var targetHWnd: HWnd; Function HookProc( wID: Word; dwData: LongInt ): Bool; export; Begin PostMessage( targetHWnd, WM_NOTIFY, wID, dwData ); Result := False End; Procedure InstallHook( notifyWindow: HWnd ); export; Begin If targetHWnd = 0 Then Begin If not NotifyRegister( 0, HookProc, NF_NORMAL ) Then Begin MessageBox( notifyWindow, 'Неудача NotifyRegister!', 'Ошибка!', MB_OK+MB_ICONSTOP ); End Else Begin targetHWnd:= notifyWindow; End; End; End; Procedure UnInstallHook; export; Begin If targetHWnd <> 0 Then Begin NotifyUnregister( 0 ); targetHWnd := 0; End; End; exports InstallHook, UnInstallHook; begin targetHWnd:= 0; end. |