如何检测Windows设备是否启用了触控功能

Ric*_*ach 6 .net c# winforms

如何检测设备是否在c#中为WinForms应用程序(非WPF)启用了触控功能.

我发现有关GetSystemMetrics的信息...无法在c#中找到如何使用它.

我尝试使用System.Windows.Input.Tablet类......即使我使用.Net Framework 4.5,也不会出现在c#中.

我尝试使用System.Windows.Devices ...不会出现在c#中,即使我使用的是.Net Framework 4.5.

我也检查了这个和这个,这似乎使这个问题重复.但是,这些都没有回答我的问题.

sk_*_*sk_ 10

GetSystemMetrics似乎是正确的方法.它应该通过p/invoke访问,如下所示:

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetSystemMetrics(int nIndex);

public static bool IsTouchEnabled()
{
     int MAXTOUCHES_INDEX = 0x95;
     int maxTouches = GetSystemMetrics(MAXTOUCHES_INDEX);

     return maxTouches > 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 我相信MAXTOUCHES_INDEX应该是95,而不是0x95 (4认同)

Bas*_*sic 1

摘自这个答案

var hasTouch = Windows.Devices.Input
              .PointerDevice.GetPointerDevices()
              .Any(p => p.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch);
Run Code Online (Sandbox Code Playgroud)

  • 事实上,如果您检查http://msdn.microsoft.com/en-us/library/windows.devices.input.pointerdevice.aspx,在“要求”上它清楚地写着“仅限Windows应用商店应用程序”。这个答案显然是错误的(链接的答案适用于“地铁应用程序”) (6认同)
  • 我认为(尽管我不是 100% 肯定)“Windows.Devices.Input”正在编组“WinRT”,并且我认为它不适用于“Win32”应用程序。 (2认同)
  • @RickInWestPalmBeach 当对在 .NET 中使用任何 Win32 函数有疑问时,我推荐 http://pinvoke.net 。在这种情况下,请检查:http://www.pinvoke.net/default.aspx/user32.getsystemmetrics (2认同)