Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2019.01.06;
Скачать: [xml.tar.bz2];

Вниз

глобальный hook на клаву   Найти похожие ветки 

 
delphi_forever   (2010-11-25 02:45) [0]

Попался в руки штрих-сканер, эмулирующий USB-клаву. Решил поэкспериментировать - набросал простенькую прогу для приема команд от него (приём хоть в TMemo напр.).
Но если программа неактивна, сообщения шлются или в текущее окно или на рабочий стол. Получится ли обойти этот трабл, установив глобальный хук на событие клавы (давно хуки не обрабатывал...)?
Думаю что анализируя последовательность от сканера, к примеру если 5 звёздочек (это можно насроить в префиксах сканера), то далее - код, иначе передаём символы в обработчик по умолчанию?


 
Германн ©   (2010-11-25 05:42) [1]


> Попался в руки штрих-сканер, эмулирующий USB-клаву. Решил
> поэкспериментировать - набросал простенькую прогу для приема
> команд от него (приём хоть в TMemo напр.).
> Но если программа неактивна

Если программа не активна, то ну её в корзину.


 
delphi_forever   (2010-11-25 10:35) [2]


> Если программа не активна, то ну её в корзину.

запущенную программу в корзину :)
Просто юзер может нажать кнопку "Пуск", что-то позапускать, закрыть, при этом, возможно, окно будет висеть но будет неактивным. В результате считанный код будет передан не известно куда...


 
Leonid Troyanovsky ©   (2010-11-25 11:57) [3]


> delphi_forever   (25.11.10 10:35) [2]

> неактивным. В результате считанный код будет передан не
> известно куда...

Почему неизвестно?
Foreground окну.

--
Regards, LVT.


 
DiamondShark ©   (2010-11-25 12:38) [4]

WH_KEYBOARD_LL


 
delphi_forever   (2010-11-25 18:16) [5]


> WH_KEYBOARD_LL

Ок, попробую...


 
delphi_forever   (2010-11-25 22:17) [6]

Слабал DLL"ку:
library MyHook;
uses
 SysUtils, Classes, Windows, Dialogs;

var
 MyMainHook: HHook;

function MyFunc(Code: integer; wParam: word;  lParam: longint): longint; stdcall;
begin
 if Code = HC_ACTION then
   if wParam = VK_MULTIPLY then
   begin
     MessageDlg("Key "*" was pressed!", mtInformation, [mbOk], 0);
   end;
 result:= CallNextHookEx(MyMainHook, Code, wParam, lParam);
end;

procedure StartHook; export; stdcall;
begin
 MyMainHook:= SetWindowsHookEx(WH_KeyBoard, @MyFunc, HInstance, 0);
end;

procedure StopHook; export; stdcall;
begin
 UnhookWindowsHookEx(MyMainHook);
end;

exports StartHook name "StartHook",
        StopHook name "StopHook";

begin
end.


Ничего хитрого, но когда запускается приложение, вызывающее StartHook, при нажатии "*" высвакивают два окна с сообщением. Откуда второе?


 
Leonid Troyanovsky ©   (2010-11-26 08:15) [7]


> delphi_forever   (25.11.10 22:17) [6]

> Слабал DLL"ку:

Это лишнее.

--
Regards, LVT.


 
DiamondShark ©   (2010-11-26 11:14) [8]


>  Откуда второе?

От отпускания?


 
DiamondShark ©   (2010-11-26 11:19) [9]


> function MyFunc(Code: integer; wParam: word;  lParam: longint):
>  longint; stdcall;

WinDef.h нам кагбэ намекает, что

typedef UINT_PTR WPARAM;

Я понимаю, что на стеке всё, вроде бы, выравнивается по DWORD, но всё же, всё же...


 
Anatoly Podgoretsky ©   (2010-11-26 12:00) [10]

Да без разницы как выравнивает и сколько места занимает на стеке. На стек всегда 32 бита в 32 битных системах появляются, хоть байт туда посылай.


 
delphi_forever   (2010-11-26 14:24) [11]


> От отпускания?

нет. Тогда бы нажал - мессаг, отпустил - мессаг.
В реальности если нажать и держать - мессэнджей будет куча, если нажать и отпустить очень быстро - их 2...

Да кстати, к истокам вопроса. Штрих-сканер видимо не эмулирует нажатия, а отсылает сообщение, которое доходит до активного окна. вобщем не реагирует программа на звёздочки, что приходятот сканера, только если на клаве нажать...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2019.01.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.001 c
15-1476267406
Игорь Шевченко
2016-10-12 13:16
2019.01.06
Советую


15-1476048601
Юрий
2016-10-10 00:30
2019.01.06
С днем рождения ! 10 октября 2016 понедельник


2-1476366771
JohnKorsh
2016-10-13 16:52
2019.01.06
COM порт и BlueTooth


4-1290338878
Denis_kas
2010-11-21 14:27
2019.01.06
автоматическое считывание с com порта


4-1290642303
delphi_forever
2010-11-25 02:45
2019.01.06
глобальный hook на клаву





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский