如何检测Windows设备是否支持触摸功能

7
在WinForms应用程序中,如何使用C#检测设备是否支持触摸(而非WPF)?
  • 我在GetSystemMetrics上找到了信息,但我不知道如何在C#中使用它。

  • 我尝试使用System.Windows.Input.Tablet类。 但是在C#中没有出现,即使我正在使用.NET Framework 4.5。

  • 我尝试使用System.Windows.Devices。 但是在C#中没有出现,即使我正在使用.NET Framework 4.5。

  • 我还查看了检测Windows 8商店应用程序是否具有触摸屏如何检测支持触摸的设备(Win 8,C#.NET),这似乎会使这个问题成为一个重复问题。然而,这两个都没有回答我的问题。

2个回答

16

GetSystemMetrics 似乎是正确的方法。它应该通过 P/Invoke 来访问,如下所示:

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

public static bool IsTouchEnabled()
{
     const int MAXTOUCHES_INDEX = 95;
     int maxTouches = GetSystemMetrics(MAXTOUCHES_INDEX);

     return maxTouches > 0;
}

1

这段内容来自于this answer

var hasTouch = Windows.Devices.Input
              .PointerDevice.GetPointerDevices()
              .Any(p => p.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Touch);

1
我并不是想争论,但“不被允许”并不是问题的技术描述。你是否遇到编译器错误?如果是这样,它们是什么?你是否已经添加了对“System.Windows.Input”命名空间的引用?(右键单击项目,添加引用) - Basic
2
我认为(虽然我不是100%确定),Windows.Devices.Input正在调用WinRT,而且我认为它对于Win32应用程序不可用。 - Jcl
6
实际上,如果您查看http://msdn.microsoft.com/en-us/library/windows.devices.input.pointerdevice.aspx,在“要求”一节中明确写着“仅适用于Windows商店应用程序”。这个答案显然是错误的(链接的答案是针对“Metro应用程序”的)。 - Jcl
1
Ahmed: 当我浏览程序集时,找不到 System.Windows.Input 或 System.Windows.Devices。 - RickInWestPalmBeach
2
@RickInWestPalmBeach 如果在使用.NET时对任何Win32函数存在疑虑,我建议访问http://pinvoke.net。在这种情况下,请查看:http://www.pinvoke.net/default.aspx/user32.getsystemmetrics - Jcl
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接