Я строю программное обеспечение в Python прямо сейчас, которое требует дифференциации устройств ввода, я пробовал много методов, включая Pywinusb.hid и клавиатура, но ни одна библиотека эффективно не поддерживает обнаружение устройства ввода вместе с событием клавиатуры. Таким образом, я прибегал к созданию необработанного обработчика ввода в C# (согласно рекомендации AI). Я никогда не делал ничего в C# раньше, но я довольно испытывал несколько других подобных языков программирования. Он рекомендовал использовать библиотеку rawinput.sharp (nuget) от Mfakane для упрощения проекта. Вот AI Code предоставил мне: < /p>
using System;
using System.Text;
using System.Text.Json;
using System.Windows.Forms;
using Linearstar.Windows.RawInput;
using Linearstar.Windows.RawInput.Native;
public class Program
{
[STAThread]
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("C# Raw Input Handler starting...");
using (var receiverWindow = new RawInputReceiverWindow())
{
receiverWindow.Input += OnRawInput;
try
{
RawInputDevice.RegisterDevice(
HidUsageAndPage.Keyboard,
RawInputDeviceFlags.InputSink | RawInputDeviceFlags.NoLegacy,
receiverWindow.Handle
);
Console.WriteLine("Successfully registered for keyboard raw input.");
Console.WriteLine("Listening for keyboard events. Press Ctrl+C to stop.");
Application.Run();
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error registering raw input devices: {ex.Message}");
}
}
Console.WriteLine("C# Raw Input Handler stopped.");
}
private static void OnRawInput(object sender, RawInputEventArgs e)
{
if (e.Data is RawInputKeyboardData keyboardData)
{
var device = keyboardData.Device;
string eventType = "unknown";
if (keyboardData.Keyboard.KeyState.HasFlag(RawKeyboardKeyState.KeyDown) ||
keyboardData.Keyboard.KeyState.HasFlag(RawKeyboardKeyState.SankKeyDown))
{
eventType = "down";
}
else if (keyboardData.Keyboard.KeyState.HasFlag(RawKeyboardKeyState.KeyUp) ||
keyboardData.Keyboard.KeyState.HasFlag(RawKeyboardKeyState.SankKeyUp))
{
eventType = "up";
}
var eventData = new
{
device = new
{
handle = device.DeviceHandle.ToInt64(),
path = device.DevicePath,
name = device.ProductName,
vendorId = device.VendorId,
productId = device.ProductId,
manufacturer = device.ManufacturerName
},
input = new
{
type = "keyboard",
eventType = eventType,
virtualKeyCode = (ushort)keyboardData.Keyboard.VirtualKey,
scanCode = (ushort)keyboardData.Keyboard.ScanCode,
keyName = GetKeyName((ushort)keyboardData.Keyboard.VirtualKey)
}
};
Console.WriteLine(JsonSerializer.Serialize(eventData));
}
}
private static string GetKeyName(ushort virtualKeyCode)
{
return ((Keys)virtualKeyCode).ToString();
}
}
< /code>
Ниже приведены элементы, которые были подчеркнуты красным (пространство имен) в моем редакторе: < /p>
System.Windows.Forms,
RawInputReceiverWindow(),
Application.Run(),
RawInputEventArgs,
keyboardData.Keyboard.KeyState,
RawKeyboardKeyState,
device.DeviceHandle,
keyboardData.Keyboard.VirtualKey,
Keys
< /code>
Я работал с ИИ, чтобы попытаться решить проблему, но все, что он продолжает делать, - это отправлять мне один и тот же код снова и снова и слепо рекомендую решения. Я пытался искать ресурсы онлайн безрезультатно. Кто -нибудь знает, есть ли лучшее решение для моего конкретного случая использования или есть ли способ разрешить ошибки пространства имен?
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-raw-inpu
Как разрешить ошибки пространства имен в C# при создании простого необработанного обработчика ввода? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
В PHP пространства имен xml переобъявляются при изменении префикса пространства имен.
Anonymous » » в форуме Php - 0 Ответы
- 133 Просмотры
-
Последнее сообщение Anonymous
-