Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
 Аватар для shum_ont
61 / 60 / 17
Регистрация: 17.02.2011
Сообщений: 161

При установке хука на клавиатуру хендл всегда равен 0

22.03.2013, 08:01. Показов 2364. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
8
9
function Key_Hook(Code: integer; wParam: word;
  lParam: Longint): Longint; stdcall; export;
begin
 ShowMessage('312312341241');
end;
exports Key_Hook;
begin
H := application.Handle;
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @Key_Hook, H, 0);
ставлю точку останова после последней строчки и HookHandle почему то равна 0 всегда .... в чем проблема вроде все делаю правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2013, 08:01
Ответы с готовыми решениями:

Установка хука на клавиатуру в сервисе
Всем доброго времени суток. Хотел написать в раздел для профи но не пустили. Я ставлю глобальный хук на клавиатуру в консольном...

При установке ловушки на клавиатуру зависают приложения, запущенные от имени другого пользователя.
Доброго времени суток. Пишу на С++ (MS Visual Studio 2008). Коротко о самой задаче, затем о проблеме. Задача: пишется EXE-ник,...

Сбивается таймер при отправке писем: интервал не всегда равен установленному
Есть определенная задача - отправляется сообщение на эмейл каждые 5 минут. Тем не менее, таймер сбивается и отправляет в рандомное...

8
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
22.03.2013, 10:21
Цитата Сообщение от shum_ont Посмотреть сообщение
все делаю правильно?
Все да не всё.
1. Хук типа WH_KEYBOARD обязан быть реализован в DLL.
Соответственно параметр H - это хэндл DLL (а не Application.Handle !!), загруженной в адресное пространство процесса, вызывающего ф-цию установки хука.

2. ShowMessage потенциально опасен в данном случае. Вместо нее следует использовать, например, MessageBox
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
26.03.2013, 21:25
Значит хук собрать это нереально? Давно хотел его сделать и книг много читал и горы исходников качал и ни чо не работало...
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
26.03.2013, 21:33
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
книг много читал
Это заметно.
0
46 / 46 / 14
Регистрация: 12.02.2013
Сообщений: 160
28.03.2013, 09:12
hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0); - такую конструкцию можно пользовать без dll
0
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 28
04.04.2013, 12:00
WH_JOURNALRECORD используй, там DLL не надо

Добавлено через 5 минут
Модератор UI удалил мое сообщение. Говорит без длл нельзя. Вот доказательство что без длл хуки пашут.

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
44
45
46
var
  Form1: TForm1;
  h:hhook;
  c: array[0..255] of char;
 
implementation
 
{$R *.dfm}
 
 
function Proc(code:integer; wParam:WPARAM; lParam:LPARAM):lresult;stdcall;
var
 i,j: byte;
 nScan: integer;
 
begin
  if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then
  begin
    Form1.memo3.lines.Text:=Form1.Memo3.lines.Text + IntToStr((teventmsg(pointer(lparam)^).paramL)) + #13;
    nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
    nscan:=(nscan shl 16);
    GetKeyNameTextA(nScan,c,256);
    with Form1 do
    begin
      begin
        Memo1.lines.Text:= Memo1.lines.Text + '{' + c + '}'+ #13;
      end
    end;
    result:=callnexthookex(h,code,wparam,lparam);
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   unhookwindowshookex(h);
end;
 
procedure TForm1.timer1Timer(Sender: TObject);
begin
Memo1.Perform(EM_LINESCROLL,0,Memo1.Lines.Count-1);
end;
Добавлено через 3 часа 5 минут
mss, Дятел твое мнение никого не интересует и оно никогда не несет полезной мысли. Ты бы сам книжки почитал а не плакал тут что ТС неграмотный. Не может сейчас - научится. Спрашивает в чем проблема, ты говоришь что он дегрод. Логика где?

UI, Дятел давай-давай удаляй сообщение. Я знаю ты легко обижаешься. Сижу на форуме чтобы получить репутацию как можно ниже, если ты еще не заметил
0
 Аватар для Trukhanov_VP
38 / 38 / 12
Регистрация: 28.03.2013
Сообщений: 272
Записей в блоге: 2
25.04.2013, 10:18
Вася 8а как заставить это работать ?
у меня определенно чего-то не хватает в программном коде...
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
44
45
46
var
  Form1: TForm1;
  h:hhook;
  c: array[0..255] of char;
 
implementation
 
{$R *.dfm}
 
 
function Proc(code:integer; wParam:WPARAM; lParam:LPARAM):lresult;stdcall;
var
 i,j: byte;
 nScan: integer;
 
begin
  if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then
  begin
    Form1.memo3.lines.Text:=Form1.Memo3.lines.Text + IntToStr((teventmsg(pointer(lparam)^).paramL)) + #13;
    nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
    nscan:=(nscan shl 16);
    GetKeyNameTextA(nScan,c,256);
    with Form1 do
    begin
      begin
        Memo1.lines.Text:= Memo1.lines.Text + '{' + c + '}'+ #13;
      end
    end;
    result:=callnexthookex(h,code,wparam,lparam);
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   unhookwindowshookex(h);
end;
 
procedure TForm1.timer1Timer(Sender: TObject);
begin
Memo1.Perform(EM_LINESCROLL,0,Memo1.Lines.Count-1);
end;
0
angstrom
25.04.2013, 10:48
Сначала скажите, что пытаетесь реализовать?
 Аватар для Trukhanov_VP
38 / 38 / 12
Регистрация: 28.03.2013
Сообщений: 272
Записей в блоге: 2
25.04.2013, 13:05
Сначала скажите, что пытаетесь реализовать?
Я читал, где-то на форумах, что можно каким-то образом перехватывать нажатия клавиш клавиатуры. Там же прочитал, что такой подход может прокатить с ручным сканером штрих-кодов (ШК).
Считать мне требуется ШК формата pdf417, он сложный и клавиш клавиатуры 'А'..'я' 'A'..'z' '0'..'9' и некоторых символов недостаточно - проще говоря символы не выводятся на экран (которые не возможно ввести с клавиатуры).
Вот хотел попробовать реализовать, что-нито действительно работающее, например перехватывать коды нажатия клавиш в диапазоне 0..255 с помощью хука..
Если есть дополнительная информация о вышеизложенном прошу ею поделится, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2013, 13:05
Помогаю со студенческими работами здесь

Как проверить, что хендл окна типа IntPtr равен 0
Получаю хендл окна типом IntPrt с помощью сторонней библиотеки. Если хендл не найден, то возвращается ноль. Как проверить, что IntPtr = 0?

При любом значении размера массива, всегда N-12 элемент будет равен NaN
В цикле происходит заполнение массива из файла. Каким-то образом выходит, что при любом значении размера массива, всегда N-12 элемент будет...

При установке стиля анимированный фон всегда поверх страницы
В общем ставлю вот этот фон http://truequery.ru/f_animated_background_to_site_in_the_style.html не реклама! И в итоге фон по верх всей...

set и map при добавлении сохраняется только последний элемент. Размер множества всегда равен 1
При вызове функции с параметрами (declare some_string) в множество добавляется элемент, и он заменяет собой предыдущий. В итоге, всегда...

Размер вектора всегда равен нулю
void f (char a, vector <int>ch) { for (int i=0; (a-'0')<10 && (a-'0'>=0) ; i++) // { ch.push_back(a-'0'); } } ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru