2013-03-26 14 views
6

Mam prosty czytnik RFID, który zachowuje się jak klawiatura i zwraca wartości odczytu z powrotem na końcu.Qt rozróżnić dwie klawiatury? (Jednym z nich jest czytnik RFID)

Chcę, aby moja aplikacja odsłuchiwała tylko pojedyncze (odrębne) urządzenie klawiatury (które wybiorę/wyróżnię jakoś) i otrzymam wartość odczytu dla mnie bez licznika, na którym fokus znajduje się na formularzu/aplikacji.

Aplikacja jest napisany z Qt C++

Zastanawiam się, czy jest to możliwe iw jaki sposób?

+0

O ile mi wiadomo, nie ma na to sposobu. Który system operacyjny jest kierowany? –

+0

Och, przepraszam, zapomniałem o tym wspomnieć. Najprawdopodobniej będą to tylko okna. –

+1

Nie jestem użytkownikiem systemu Windows, więc nie jest to pełna odpowiedź - jeśli wiesz, jak odróżnić RFID od rzeczywistej klawiatury za pomocą zdarzeń MSG systemu Windows, to QCoreApplication :: winEventFilter (lub, w Qt 5, QCoreApplication :: installNativeEventFilter) może pomóc. – peppe

Odpowiedz

0

Jest to możliwe dla systemu operacyjnego Windows za pomocą interfejsu WinAPI. Nigdy nie korzystałem z QT, więc nie wiem, czy w tym celu istnieją klasy owijające. Powinieneś użyć nieprzetworzonego wejścia. Sprawdź ten link na podręczne: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536(v=vs.85).aspx (jest przykładem tam pod Using Raw Input sekcji

również spojrzeć na ten projekt http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard rozumiem swój napisany w C#, ale może to być pomocne

1

Nie wiem, czy To pomaga, ale mieliśmy podobne wyzwanie, jakim jest wykrywanie danych wejściowych ze skanera kodów kreskowych Skaner po prostu "wpisał" w niektórych cyfrach bardzo szybko: niektóre skanery kończą je znakiem kontrolnym, ale ponieważ nie jest to uniwersalne, nie możemy nawet na tym polegać.

Zauważyłem, że QEvent::KeyboardLayoutChange zostanie uruchomiony, gdy skaner kodów kreskowych rozpocznie inpu t, ale nie jestem pewien, czy ma to zastosowanie we wszystkich możliwych scenariuszach - ale możesz chcieć to sprawdzić.

Skończyło się zainstalowanie filtra zdarzeń aplikacji szeroki (QApplication::installEventFilter), który sprawdza klawiszy (QEvent::ShortcutOverride lub QEvent::KeyPress) iw oparciu o takie kryteria jak ciągłej sekwencji cyfr, bardzo krótkim odstępie czasu, itp zdecyduje, że to było wejście kodów kreskowych . Ma oczywiste pułapki, ale jeśli potrzebujesz bardzo ogólnego rozwiązania, możesz być zainteresowany czymś podobnym. Ponadto, jeśli wejście RFID zawsze zwraca znak kontrolny, może to znacznie uprościć to podejście.