首页 > 解决方案 > Windows 注册表 EnableCursorSurpression 不适用于触摸输入

问题描述

编辑- 更新了更好的复制案例。

我想在触摸输入期间停止光标消失。我已经设置了注册表值;

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableCursorSurpression

为 0 但在触摸输入期间光标仍被抑制。

我已经问过一个关于我正在尝试编写以消耗所有触摸屏输入的 C++ 程序的更一般性的问题。我认为这个注册表值可以解决问题,所以我想问一个更具体的问题。但是我的原始帖子在这里;

Windows SendInput 使鼠标光标闪烁并消失

调用 GetCursorInfo 确认发生这种情况是因为光标被抑制,但将注册表值设置为 0 没有任何区别。当我的程序未运行时,它甚至不会阻止光标在正常触摸输入期间消失。

这可以通过简单地更改注册表值并查看触摸输入后光标是否仍然可见来重现。要查看我描述的闪烁,只需使用 Visual Studio 创建一个新的 Windows 桌面应用程序并将此代码添加到 WndProc 函数;

 case WM_POINTERUPDATE:
    {
        INPUT Inputs[1] = { 0 };
        Inputs[0].type = INPUT_MOUSE;
        Inputs[0].mi.dx = 1;
        Inputs[0].mi.dy = 0;
        Inputs[0].mi.dwFlags = MOUSEEVENTF_MOVE;
        SendInput(1, Inputs, sizeof(INPUT));
        break;
    }

运行程序,触摸窗口内的屏幕,观察光标向右移动,同时闪烁。当光标在程序的窗口上时闪烁并没有那么糟糕,但是当它退出它时会变得更糟,特别是如果它然后通过另一个带有自定义光标的窗口,例如 mspaint 窗口。

添加此代码;

    CURSORINFO cursorInfo;
    cursorInfo.cbSize = sizeof(CURSORINFO);
    GetCursorInfo(&cursorInfo);

允许我检查状态并查看光标是否被抑制,无论该注册表值如何。

标签: c++windowscursorregistrytouch

解决方案


推荐阅读