Я пытаюсь разработать приложение, которое может блокировать ввод с помощью сканера RFID, который действует как клавиатура в окнах. Я попытался выполнить это с использованием сырого ввода и клавиатурного крючка, но проблема в том, что клавиатурный крючок работает до того, как я могу получить информацию о необработанном устройстве ввода, чтобы решить заблокировать сообщение или нет. мое приложение должно работать на всех потоках. Пожалуйста, помогите мне !Отличительный RFID-сканер с клавиатуры в C#
`
public partial class Form1 : Form
{
private readonly RawInput _rawinput;
globalKeyboardHook gkh;
bool _blockKeyboard = false;
public Form1()
{
InitializeComponent();
_rawinput = new RawInput(Handle, false);
gkh = new globalKeyboardHook();
gkh.HookedKeys.Add(Keys.D0);
gkh.HookedKeys.Add(Keys.D1);
gkh.HookedKeys.Add(Keys.D2);
gkh.HookedKeys.Add(Keys.D3);
gkh.HookedKeys.Add(Keys.D4);
gkh.HookedKeys.Add(Keys.D5);
gkh.HookedKeys.Add(Keys.D6);
gkh.HookedKeys.Add(Keys.D7);
gkh.HookedKeys.Add(Keys.D8);
gkh.HookedKeys.Add(Keys.D9);
gkh.HookedKeys.Add(Keys.Enter);
gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);
_rawinput.KeyPressed += OnKeyPressed;
}
private void OnKeyPressed(object sender, RawInputEventArg e)
{
label1.Text = e.KeyPressEvent.DeviceName;
if (e.KeyPressEvent.DeviceName.Contains("VID_1D57"))
{
_blockKeyboard = true; //blochez
}
else
_blockKeyboard = false;
}
void gkh_KeyUp(object sender, KeyEventArgs e)
{
}
void gkh_KeyDown(object sender, KeyEventArgs e)
{
if (_blockKeyboard)
{
lstLog.Items.Add("Down\t" + e.KeyCode.ToString());
e.Handled = true;
}
else
e.Handled = false;
}
}
} `
Я использовал низкоуровневый клавиатурный крючок и rawinput api, чтобы принять решение. я выложу код ниже –