![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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" Помогите разобратся. Заранее спасибо! |
|
#2
|
||||
|
||||
|
я пользовася этим на D7 никаких ошибок не было
|