Wiele klawiatur i niskopoziomowych haków

Mam system, w którym mam wiele klawiatur i naprawdę muszę wiedzieć, z której klawiatury pochodzi pociągnięcie klawisza. Aby wyjaśnić konfigurację:

  1. mam zwykły komputer i klawiaturę USB
  2. mam zewnętrzny ekran VGA z twardymi klawiszami
  3. Klawisze twarde są mapowane jako standardowa klawiatura USB, wysyłając ograniczoną liczbę kodów klawiszy (F1, F2, Return, + i -)

Mam niskopoziomowy hook (w C#, ale w rzeczywistości wywołujący funkcjonalność Win32), który jest w stanie aby poradzić sobie z wejściem, nawet gdy moja aplikacja nie jest skupiona.

Problem polega na tym, że przy użyciu zwykłej klawiatury niektóre z mapowanych kodów klawiszy na ekranie zewnętrznym są wyświetlane przez aplikację. Jednym z naciśnięć klawiszy wysyłanych przez zewnętrzny ekran i używanych do potwierdzenia jest VK_RETURN. Jeśli nie mogę zidentyfikować "urządzenia" i filtrować na nim, użytkownik może wykonywać działania i potwierdzać je na ekranie, na który nawet nie patrzy.

Skąd mam wiedzieć która klawiatura była odpowiedzialna za naciśnięcie klawisza?

Author: Ray Hayes, 2008-09-18

2 answers

Tak, jestem poprawiony, mój błąd, uczenie się czegoś nowego każdego dnia.

Oto moja próba nadrobienia tego :):

  • Zarejestruj urządzenia, których chcesz użyć do wejścia surowego (dwie klawiatury) za pomocą metody:: RegisterRawInputDevices ().

  • Możesz pobrać te urządzenia z GetRawInputDeviceList()

  • Po zarejestrowaniu urządzeń zaczniesz otrzymywać wiadomości WM_INPUT.

  • LParam wiadomości WM_INPUT zawiera Struktura RAWKEYBOARD, której można użyć do określenia klawiatury, z której pochodzi wejście, oraz Wirtualnego kodu klawiatury i rodzaju wiadomości (WM_KEYDOWN, WM_KEYUP,...)

  • Możesz więc ustawić flagę, skąd pochodzi ostatnia wiadomość, a następnie wysłać ją do zwykłych manipulatorów wprowadzania klawiatury.

 14
Author: Roel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 14:18:25

Nie ma mowy. Windows streszcza to dla Ciebie. Jak wspomniano, musisz napisać / zmodyfikować sterownik urządzenia.

 -3
Author: Roel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 10:01:56