![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Народ нужна помощь! Написал Dll и пытаюсь выполнить из нее процедуру при этом вылетает ошибка:
"Access violation at adress 014881B0. Write of address 80E800D9" В чем причина? Вот код библиотеки: Код:
library KeyHook; uses Windows, SysUtils, Messages; const KEY_UP = $40000000; WM_HOOK_MESSAGE = WM_USER + 2; var Hook: HHook; AppHandle: HWND; function GlobalKeyBoardHook(Code: Integer; wParam: Integer; lParam: Integer): Cardinal; Stdcall; var Layout: Integer; begin if Code < 0 then begin Result:=CallNextHookEx(Hook, Code, wParam, lParam); Exit; end; if ((lParam and KEY_UP) = 0) and (wParam >= 65) and (wParam <= 90) then begin Layout := GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)); SendMessage(AppHandle, WM_HOOK_MESSAGE, wParam, Layout); end; Result := CallNextHookEx(Hook, Code, wParam, lParam); end; procedure SetHook(Handle: HWND); begin AppHandle := Handle; Hook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalKeyBoardHook, HInstance, 0); end; procedure UnHook; begin UnhookWindowsHookEx(Hook); end; exports SetHook, UnHook; begin end. Здесь описываются три процедуры: Установка и удаление глобальной ловушки, а также процедура отсылающая сообщения моему окну при перехвате событий клавиатуры. Экспортируются Процедуры установки и удаления ловушки.
Вот вызов процедур: Код:
implementation {$R *.dfm} procedure SetHook(Handle: HWND); Stdcall; external 'KeyHook.dll'; procedure UnHook; Stdcall; external 'KeyHook.dll'; procedure TForm.ButtonClick(Sender: TObject); begin SetHook(Handle); end; procedure TForm.HookEvent(var Msg: TMessage); //Перехват события begin Showmessage('Код: ' + IntToStr(Msg.WParam) + 'Раскладка: ' + IntToStr(Msg.LParam)); end; procedure TForm.FormClose(Sender: TObject; var Action: TCloseAction); begin UnHook; end; Это код модуля моей программы. При нажатии кнопки вызывается установка хука(где и вылезает эта ошибка). При закрытии формы ловушка закрывается. И стоит обработчик события "WM_HOOK_MESSAGE" Помогите разобратся. Заранее спасибо! Код:
ShowMessage('HelloWorld!'); ![]() |