Я создаю приложение в UWP для Raspberry Pi 3B с этим сенсорным экраном https://www.waveshare.com/wiki/5inch_HDMI_LCD_ (B)
Сенсорная панель на экране выстроена неправильно, поэтому необходимо откалибровать его. Но для этого мне нужен доступ к необработанным координатным данным из него. Я попытался использовать событие Tapped, но ОС регистрирует эти координаты (плохие) с сенсорного экрана и обрабатывает их, поэтому в основном нажимается неправильная кнопка.
Я пытался подключиться к сенсорному экрану с Windows .Devices.HumanInterfaceDevice.HidDevice:
private HidDevice _device;
public HidDevice device
{
get
{
return _device;
}
set
{
_device = value;
}
}
public MainPage()
{
this.InitializeComponent();
EnumerateDevices(usgPage, vend, prodId);
}
public async Task EnumerateDevices(ushort usgPage, ushort vend, ushort prodId, ushort usgId)
{
ushort usagePage = usgPage;
ushort vendor = vend;
ushort productId = prodId;
ushort usageId = usgId;
var selector = HidDevice.GetDeviceSelector(usagePage, usageId, vendor, productId);
DeviceInformationCollection devices;
devices = await DeviceInformation.FindAllAsync(selector);
var a = devices[0].Id;
try
{
devices = await DeviceInformation.FindAllAsync(selector);
}
catch
{
return;
}
device = await HidDevice.FromIdAsync(a, Windows.Storage.FileAccessMode.ReadWrite);
}
Манифест
<Capabilities>
<DeviceCapability Name="humaninterfacedevice">
<Device Id="vidpid:0EEF 0005">
<Function Type="usage:000D 0004" />
</Device>
</Capabilities>
Список устройств
Но устройство всегда null , хотя devices содержит мой сенсорный экран. Я думаю, это потому, что ОС взаимодействует с сенсорным экраном, и в результате я не могу с ним взаимодействовать.
Я попытался отключить PnP с помощью
Get-PnpDevice | Where-Object {$_.FriendlyName -like '*touch screen*'} | Disable-PnpDevice -Confirm:$false
из powershell, что отключило сенсорный экран полностью, и я не мог видеть его даже в списке устройств .
Поэтому я попытался изменить реестр с помощью
reg add HKLM\Software\Microsoft\Wisp\Touch -v TouchGate -f -d 0 -t REG_DWORD
, но ОС все еще взаимодействовала с сенсорный экран, и это не имело никакого эффекта вообще. Кроме того, я проверил, действительно ли значение в реестре изменилось, и оно изменилось.
Моя идея состоит в том, что если бы можно было как-то сказать ОС игнорировать ввод с сенсорного экрана, но не отключать устройство HID полностью, чтобы я мог подключиться к нему из моего приложения UWP и обрабатывать координаты самостоятельно (например, вычисляя правильную позицию для указателя), а затем я бы вводил с помощью Windows .UI.Input.Preview.Injection.InputInjector точку с правильными координатами.