@springimport

Как работать с barcode scanner в hid?

Работаю со сканером баркодов на питоне. После долгих поисков и проб смог реализовать считывание кодов в линуксе. Но нужно реализовать в винде. К сожалению, в винде нет events и hidraw, поэтому легко перенести не получилось.
На примете есть несколько вариантов: ловля кодов напрямую (устройство в hid-режиме), работа с устройством через какой-то драйвер, работа с usb напрямую (самый нежелательный вариант). Начал с первого.
Для винды есть некоторые полезные библиотеки типа pywin32, pyHook, hid. С помощью них сделал несколько вариантов считывания разной степени качества.
Проблема в том что я плохо понимаю как работает все под капотом, особенно это касается винды. Не получается придумать какое-то хорошее решение. Даже гуглинг не помогает: тему мало кто знает и примеры часто чуть сложнее hello world + для винды нет библиотек. В связи с чем возникло ощущение что такие вещи делаются на .Net с помощью стандартных либ и без костылей. Или как-то еще. Даже появляются мысли засунуть линукс в виртуалку и прокинуть устройство туда, а винде как-то ловить события уже с моего скрипта...
Но пока что я все же хочу попробовать выполнить это на питоне. В связи с чем прошу что-то посоветовать, может быть какой-то пример решения. Так же было бы интересно узнать как фильтровать ввод с "устройств ввода": где пришло с клавиатуры, а где со сканера.

Вот один из вариантов ловли событий hid для винды:
spoiler
import pythoncom, pyHook, sys, logging

def OnKeyboardEvent(event):
# Source: http://code.activestate.com/recipes/553270-using-pyhook-to-block-windows-keys/
    print ('MessageName:',event.MessageName)
    print ('Message:',event.Message)
    print ('Time:',event.Time)
    print ('Window:',event.Window)
    print ('WindowName:',event.WindowName)
    print ('Ascii:', event.Ascii, chr(event.Ascii))
    print ('Key:', event.Key)
    print ('KeyID:', event.KeyID)
    print ('ScanCode:', event.ScanCode)
    print ('Extended:', event.Extended)
    print ('Injected:', event.Injected)
    print ('Alt', event.Alt)
    print ('Transition', event.Transition)
    print ('---')

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
pythoncom.PumpMessages()
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы