Publish your project for free and start receiving offers from freelance contractors in serveral minutes after publication!
1536 ₴

Утилита (сервис Windows) для перехвата событий клавиатуры.

project complete


Утилита должна обладать следующим функционалом:


- глобальный перехват нажатий клавиш с нескольких клавиатур (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';

...........

Client's feedback about the contractor Сергее Новикове

Quality
Professionalism
Price
Availability
Terms

Нетривиальная задача, но человек справился. Огромное спасибо за сотрудничество!

Никита И. Никита Иванов | Safe Safe

Freelancer's feedback about the client Никите Иванове

Payment
Task formulation
Requirements
Availability

Интересная нетипичная задача, не обошлось без разного рода осложнений, но в целом все хорошо. Заказчик технически грамотный и адекватный.

Сергей Н. Сергей Новиков | Safe Safe



  1.  freelancer isn't working in the service any longer
  2. 7 daysconcealed
    Евгений C
     204 

    Сделаю

    Евгений
    skype: elperus
    email: [email protected]

    Lithuania Lithuania | 30 August 2016 |
  3. 13 daysconcealedWinning proposal
    Сергей Новиков
     585   10   0

    Довольно нетривиальная у вас обработка ввода.

    Проверил, большую часть описанного можно реализовать используя raw input и еще пару мелочей. Но учтите что сделать все в точности по вашему описанию не получится. К примеру, в виде службы нельзя, т.к. служба не может иметь активных окон и не может обрабатывать оконные сообщения, необходимые для работы с хуками и тем же raw input.

    PS. Delphi не использую, но есть язык очень близкий к нему

    Ukraine Kyiv | 6 September 2016 |
  4. 5 daysconcealed
    Анатолий Кешман
     1265  verified   24   1

    Здравствуйте. Есть опыт перехвата клавиш. Так же есть опыт работы с разными сканерами штрих кодов. Могу реализовать на C#. Буду рад сотрудничеству.

    Ukraine Uman | 31 August 2016 |
  • Зачем вы подключаете много сканеров в режиме эмуляции клавиатуры?  Это нецелевое использование режима.

    А если они одновременно начнут передавать?

    Для системного ввода (а не в активный edit) целесообразно применить режим компорта.

    Зачем создавать проблемы, а потом их героически преодолевать?!

  • Никита Иванов — project author
    Complain | 6 September 2016 |

    Не все современные модели поддерживают режим эмуляции com-порта.

  • А зачем нам все? Речь о конкретном проекте.

    Главное, чтобы в нём было заложено адекватное железо, способное работать в системе.


Client
Project published
30 August 2016
210 views
Contractor location
Ukraine Ukraine