Значится, пишу прогу закрытия окна на момент его создания... Вот код длл (закоммертированный текст - для WH_GETMESSAGE)
| Код | library dll; uses Windows, Messages; var Hook: hHook; function HookProc(Code: Integer; wParam: Integer; lParam: Integer): Integer; stdcall; var Text: String; begin if {TMsg(Pointer(lParam)^).message}Code = {WM_CREATE}HCBT_CREATEWND then begin SendMessage({TMsg(Pointer(lParam)^).hwnd}wParam, WM_GETTEXT, 255, Integer(LPCTSTR(Text))); if Text = 'Калькулятор' then SendMessage({TMsg(Pointer(lParam)^).hwnd}wParam, WM_DESTROY, 0, 0); end; Result := CallNextHookEx(Hook, Code, wParam, lParam); end; function SetHook(State: Boolean): Boolean; export; function Hooked: Boolean; begin Result := (Hook <> 0); end; begin if State then begin if not Hooked then Hook := SetWindowsHookEx({WH_GETMESSAGE}WH_CBT, @HookProc, hInstance, 0); Result := Hooked; end else begin if Hooked then UnhookWindowsHookEx(Hook); Hook := 0; Result := True; end; end; exports SetHook; begin end.
|
а вот код приложения
| Код | program progra; uses Windows; type TSetHook = function (State: Boolean): Boolean; var SetHook: TSetHook; DLLHandle: THandle; Msg: TMsg; begin DLLHandle := LoadLibrary(LPCTSTR('dll.dll')); @SetHook := GetProcAddress(DLLHandle, 'SetHook'); if SetHook(True) then while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; SetHook(False); FreeLibrary(DLLHandle); Halt; end.
|
Оба хука одинаково не работают. ПАМАГИТЕ!!! |