Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 2
Регистрация: 10.09.2013
Сообщений: 72

Ошибка в хуке клавиатуры

30.01.2014, 19:11. Показов 2074. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
First chance exception at $0012FED2. Exception class $C0000005 with message 'access violation at 0x0012fed2: read of address 0x01400593'. Process ProjectHook.exe (4016)

DLL
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
library Hook;
 
uses
  Windows,
  System.SysUtils;
 
{$R *.res}
 
type
  TAction = procedure(code: Integer; wparam: wparam; lparam: lparam) stdcall;
 
var
  SysHook: HHook = 0;
  Action: TAction;
 
function HookAction(code: Integer; wparam: wparam; lparam: lparam)
  : LRESULT stdcall;
begin
  Result := CallNextHookEx(SysHook, code, wparam, lparam);
  if code = HC_ACTION then Action(code, wparam, lparam);
end;
 
procedure SetHook(var Action: TAction);
begin
  SysHook := SetWindowsHookEx(WH_KeyBoard, HookAction, HInstance, 0);
end; //Ошибка после этой строчки
 
procedure UnHook;
begin
  UnhookWindowsHookEx(SysHook);
  SysHook := 0;
end;
 
exports
  SetHook, UnHook;
end.
UNIT

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
unit Hook;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;
 
  TAction = procedure(code: Integer; wparam: wparam; lparam: lparam) stdcall;
var
  Form1: TForm1;
 
procedure SetHook(Action: TAction); stdcall; external 'Hook.dll';
procedure UnHook; external 'Hook.dll';
 
implementation
 
{$R *.dfm}
 
procedure HookAction(code: Integer; wparam: wparam; lparam: lparam) stdcall;
begin
  Form1.Memo.Lines.Add(string(wparam));
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnHook;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetHook(HookAction);
end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2014, 19:11
Ответы с готовыми решениями:

Как правильно обрабатывать комбинации клавиш в хуке клавиатуры?
Подскажите пожалуйста как правильно реализовать структуру для хуков на комбинации Alt+Tab,Alt+Space,Ctrl+Alt+Delete и другие. public...

Ошибка при глобальном хуке
Есть библиотека - https://code.google.com/p/klog-sharp/source/browse/trunk/Keylogger/UserActivityHook.cs?r=2 Инициализирую так: ...

Сделать переключение Shift или CapsLock в хуке
Ну вот небольшой открывок из кода! При нажатие на Кнопку "A" ( большую записывается она в текстбокс!) private void...

24
2 / 2 / 2
Регистрация: 10.09.2013
Сообщений: 72
31.01.2014, 21:55  [ТС]
Студворк — интернет-сервис помощи студентам
NIKOLAYY,
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Writeln(f, key);
Write(f, key);
А вообще открывать и закрывать файл при каждом нажатии клавиши немного неэффективно
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
31.01.2014, 22:07
Цитата Сообщение от ec6f5d2 Посмотреть сообщение
NIKOLAYY,
А вообще открывать и закрывать файл при каждом нажатии клавиши немного неэффективно
Я так понял это сделано для того что файл log.txt если он удален он снова создается при нажатии клавиши.
0
2 / 2 / 2
Регистрация: 10.09.2013
Сообщений: 72
31.01.2014, 22:35  [ТС]
DLL
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
library hook;
 
uses Windows, Messages, SysUtils;
 
var
  cbdHook: hHook = 0;
  Wnd: hWnd;
 
function MsgProc(Code: Integer; wParam: Word; lParam: Longint): LRESULT;
begin
  if (Code = HC_ACTION) then
  begin
    Beep;  //Сюда не доходит
    PostMessage(Wnd, WM_USER + 1, wParam, lParam);
    Result := CallNextHookEx(cbdHook, Code, wParam, lParam);
  end;
end;
 
procedure SetHook(AppWnd: hWnd; Hook: Boolean); stdcall; export;
begin
  beep;  //Сюда тоже
  if Hook then
  begin
    if cbdHook = 0 then
    begin
      cbdHook := SetWindowsHookEx(WH_KEYBOARD, @MsgProc, HInstance, 0);
      Wnd := AppWnd;
    end;
  end else
  begin
    if cbdHook <> 0 then
      UnHookWindowsHookEx(cbdHook);
    cbdHook := 0;
  end;
end;
 
exports SetHook name 'SetHook';
 
begin
end.
UNIT
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure WMUser1(var Msg: TWMKey); message WM_USER + 1;
  end;
 
var
  Form1: TForm1;
 
procedure SetHook(AppWnd: hWnd; Hook: boolean) stdcall; external 'hook.dll';
 
implementation
 
{$R *.DFM}
 
procedure TForm1.FormShow(Sender: TObject);
begin
  SetHook(Handle, True);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SetHook(0, False);
end;
 
procedure TForm1.WMUser1(var Msg: TWMKey);
begin
  Memo1.Lines.Text := Memo1.Lines.Text + Char(Msg.CharCode);
end;
 
end.
Ошибок нет, хук не работает, из DLL не выполняется ни одной строчки
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
31.01.2014, 22:39
Цитата Сообщение от ec6f5d2 Посмотреть сообщение
из DLL не выполняется ни одной строчки
интереса для: как определили?
0
2 / 2 / 2
Регистрация: 10.09.2013
Сообщений: 72
01.02.2014, 13:18  [ТС]
cotseec, добавил beep; в начало всех процедур и функций DLL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2014, 13:18

Как отличить какое меню конкретно я отловил в хуке?
Хукаю я менюшку с целью перерисовать. У меня в этой менюшке есть еще сабменюшка (ну, по стрелке раскрывается) Ее я тоже хочу...

Ошибка считывания с клавиатуры
Есть модуль: https://drive.google.com/uc?id=1wwh_5cv2nmPhpFaHarpWfbgVgBnXbkyY&amp;export=download Есть код: uses PascalABCSystem; ...

ПК не видит клавиатуры (ошибка 39)
Здравствуйте. прошу помощи.... купил клавиатуру Logitech illuminated, вставил - не работает... до этого pc2 стояла.. удалил драва в...

Ошибка при вводе с клавиатуры
k=13 while True: answer=input(&quot;Введите число:&quot;) if answer==&quot;exit&quot;: break user_answer=int(answer) if...

Ошибка перехвата клавиатуры (hook)
Есть задача: запустить приложение и отлавливать нажатые клавиши. Привожу часть кода, отвечающую за это://dllmain.cpp: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru