Утилита (сервис Windows) для перехвата событий клавиатуры.
1536 UAHУтилита должна обладать следующим функционалом:
- глобальный перехват нажатий клавиш с нескольких клавиатур (usb сканеры штрих кода в режиме эмуляции клавиатуры подключены к одному компьютеру) с идентификацией клавиатуры
- накопление введенной порции информации в разрезе клавиатуры до появления определенного символа (Enter) без передачи нажатий в систему. Нажатия клавиш на других клавиатурах должны проходить в систему.
- В зависимости от настроек передать сформированный пакет в com-порт или для обработки в систему с дополнительными символами в начале или в конце сформированной строки.
- В зависимости от настроек определять таймаут между нажатиями клавиш, если таймаут больше определенного (печатает человек на клавиатуре) - передавать в систему, если меньше (идет поток со сканера или считывателя магнитных карт) - ожидать завершения (нажатие Enter или другой символ) и обрабатывать согласно настройкам.
Желательно - delphi.
Был в свое время написан макрос на Lua Macros, но он работает нестабильно - прекращается перехват клавиатур до перезапуска утилиты. Пример макроса:
lmc_device_set_name("KB", "1B66379C");
lmc_device_set_name("KB2", "8AC86F7");
lmc_add_com('C1', 'COM1')
lmc_add_com('C2', 'COM3')
lmc_print_devices();
fdd1=''; fdd2='';
lmc_set_handler("KB",function(button, direction)
symbol_ = '';
if (direction==1) then
if (button==13) then
print("ok");
print(fdd1);
lmc_send_to_com('C1', fdd1..'\r')
fdd1='';
--lmc_send_to_com('C1', string.byte(10))
elseif (button==48) then
symbol_ = '0';
elseif (button==49) then
symbol_ = '1';
elseif (button==50) then
symbol_ = '2';
elseif (button==51) then
symbol_ = '3';
elseif (button==52) then
symbol_ = '4';
elseif (button==53) then
symbol_ = '5';
elseif (button==54) then
symbol_ = '6';
elseif (button==55) then
symbol_ = '7';
elseif (button==56) then
symbol_ = '8';
elseif (button==57) then
symbol_ = '9';
else
print("Callback for whole keyboard 2: button " .. button .. ", direction "..direction)
end
--print(symbol_);
--lmc_send_to_com('C1', symbol_)
fdd1=fdd1..symbol_;
end
end)
lmc_set_handler("KB2",function(button, direction)
symbol_ = '';
if (direction==1) then
if (button==13) then
print("ok");
print(fdd2);
lmc_send_to_com('C2', fdd2..'\r')
fdd2='';
--lmc_send_to_com('C1', string.byte(10))
elseif (button==48) then
symbol_ = '0';
elseif (button==49) then
symbol_ = '1';
elseif (button==50) then
symbol_ = '2';
elseif (button==51) then
symbol_ = '3';
elseif (button==52) then
symbol_ = '4';
elseif (button==53) then
symbol_ = '5';
elseif (button==54) then
symbol_ = '6';
...........
Отзыв заказчика о сотрудничестве с Ihor K.
Утилита (сервис Windows) для перехвата событий клавиатуры.Нетривиальная задача, но человек справился. Огромное спасибо за сотрудничество!
Отзыв фрилансера о сотрудничестве с Никитой Ивановым
Утилита (сервис Windows) для перехвата событий клавиатуры.Интересная нетипичная задача, не обошлось без разного рода осложнений, но в целом все хорошо. Заказчик технически грамотный и адекватный.
-
958 20 0 Довольно нетривиальная у вас обработка ввода.
Проверил, большую часть описанного можно реализовать используя raw input и еще пару мелочей. Но учтите что сделать все в точности по вашему описанию не получится. К примеру, в виде службы нельзя, т.к. служба не может иметь активных окон и не может обрабатывать оконные сообщения, необходимые для работы с хуками и тем же raw input.
PS. Delphi не использую, но есть язык очень близкий к нему
-
1483 57 2 1 Здравствуйте. Есть опыт перехвата клавиш. Так же есть опыт работы с разными сканерами штрих кодов. Могу реализовать на C#. Буду рад сотрудничеству.
-
168 Сделаю
Евгений
skype: elperus
email: [email protected]
-
Зачем вы подключаете много сканеров в режиме эмуляции клавиатуры? Это нецелевое использование режима.
А если они одновременно начнут передавать?
Для системного ввода (а не в активный edit) целесообразно применить режим компорта.
Зачем создавать проблемы, а потом их героически преодолевать?!
-
А зачем нам все? Речь о конкретном проекте.
Главное, чтобы в нём было заложено адекватное железо, способное работать в системе.
-
Актуальные фриланс-проекты в категории Десктопные приложения
Добавить паузы 10-30 секунд между отправками писемЗдравствуйте! Ищу опытного программиста 1С / BAS (BAF) для оперативного решения технической проблемы с почтовой рассылкой.Суть проблемы: Используем бухгалтерскую программу BAF (Business Automation Framework), редакция 2.0. Раз в месяц возникает необходимость массово отправлять… Веб-программирование, Десктопные приложения ∙ 5 дней 15 часов назад ∙ 10 ставок |
Реверс-инжиниринг консольных утилит для опроса контроллеров SSD (Flash ID)1. Цель работы Выделение программного интерфейса (API) взаимодействия с контроллерами SSD/NVMe из предоставленного набора консольных утилит (Phison, Silicon Motion, Realtek, Maxiotek, Marvell, JMicron и др.). Результатом должно стать рабочий код на языке C/C++ или точная… C и C++, Десктопные приложения ∙ 6 дней 2 часа назад ∙ 6 ставок |
Модификация в работе эмулятора
2000 UAH
Здравствуйте. Я скачал с Интернета эмулятор игрового автомата gaminator cf final. Он мне очень понравился, но там есть недочёты. Есть админ панель, но она открывается свободно, но не закрывается вообще. Закрывается только вместе с приложением. А данные, после изменения в админ… Десктопные приложения ∙ 13 дней 16 часов назад ∙ 10 ставок |