Я строю программное обеспечение в 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#
Место общения программистов C#
1753043808
Anonymous
Я строю программное обеспечение в 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>
Я работал с ИИ, чтобы попытаться решить проблему, но все, что он продолжает делать, - это отправлять мне один и тот же код снова и снова и слепо рекомендую решения. Я пытался искать ресурсы онлайн безрезультатно. Кто -нибудь знает, есть ли лучшее решение для моего конкретного случая использования или есть ли способ разрешить ошибки пространства имен?
Подробнее здесь: [url]https://stackoverflow.com/questions/79708359/how-do-i-resolve-the-namespace-errors-in-c-sharp-when-building-a-simple-raw-inpu[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия