如何从 Windows UWP 应用程序中查询双击持续时间?

How to query the double-tap duration time from Windows UWP apps?

在我的 Windows UWP 应用程序中,我有一个对双击做出反应的组件。我通过响应 CoreIndependentInputSourcePointerPressed 事件来实现这一点。在事件处理程序中,我得到了以下代码:

if((e->CurrentPoint->Timestamp - _lastTimestamp) < _doubleClickDuration)
{
  Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]()
  {
    // Do whatever needs to be done on double-taps
  }));
}

_lastTimestamp = e->CurrentPoint->Timestamp;

_doubleClickDuration 是定义双击持续时间的变量。

代码按预期工作,但我面临的问题是我需要将 _doubleClickDuration 设置为 "reasonable" 值。对一个人来说合理的事情可能对另一个人不合理,这就是为什么 Windows 允许您在控制面板中配置双击的持续时间。

有一个名为 GetDoubleClickTimeWindows API function 似乎 return 在 Windows 中配置的值。但是,该函数被标记为“[仅限桌面应用程序]”,这意味着我无法从 Windows UWP 应用程序调用该函数。

与该功能等效的 Windows UWP 是什么,或者我如何确定双击的配置持续时间是多少?

如我问题下方的评论所述,Windows 的双击持续时间可以通过 UISettings 访问。首先,必须构造 class 的对象的对象。我作为 class 成员使用以下代码行执行此操作:

Windows::UI::ViewManagement::UISettings _uiSettings;

双击持续时间,我认为与双击持续时间相同,可以通过 属性 DoubleClickTime 访问_uiSettings 对象。它 return 是一个 unsigned int,以毫秒为单位表示双击持续时间。

因为我问题中代码的行 e->CurrentPoint->Timestamp return 是以微秒为单位的时间,所以有必要将 DoubleClickTime 乘以 1000 以便能够比较它们值。

因此,完整代码现在如下所示:

if((e->CurrentPoint->Timestamp - _lastTimestamp) < (_uiSettings.DoubleClickTime * 1000))
{
  Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]()
  {
    // Do whatever needs to be done on double-taps
  }));
}

_lastTimestamp = e->CurrentPoint->Timestamp;

在 Windows' 控制面板的鼠标设置中更改双击持续时间也会更改 DoubleClickTime 属性 的 return 值。

请注意,以这种方式更改值会更改注册表项 HKEY_CURRENT_USER\Control Panel\MouseDoubleClickSpeed 的值。默认值为 500(毫秒)。