c++ - Windows 注册表 EnableCursorSurpression 不适用于触摸输入
问题描述
编辑- 更新了更好的复制案例。
我想在触摸输入期间停止光标消失。我已经设置了注册表值;
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableCursorSurpression
为 0 但在触摸输入期间光标仍被抑制。
我已经问过一个关于我正在尝试编写以消耗所有触摸屏输入的 C++ 程序的更一般性的问题。我认为这个注册表值可以解决问题,所以我想问一个更具体的问题。但是我的原始帖子在这里;
调用 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);
允许我检查状态并查看光标是否被抑制,无论该注册表值如何。
解决方案
推荐阅读
- java - Stream.of() 和 stream() 的区别
- swiftui - 如何从导航堆栈中弹出多个视图?
- angular - 声明时未定义的变量
- cobol - 如何在 COBOL 中恢复 EXEC CICS 的默认条件处理?
- javascript - 正则表达式 - 如何排除包含特定字符的特定字符串
- java - 如何为自定义布局适配器android studio创建搜索过滤器
- php - 如果 'ID'=='ID' 则循环检查复选框并显示检查
- r - \Sexpr 如果包含 LaTeX 命令,则无法解析和评估
- android - Firebase cloudfunctions对象不能用json android编码
- javascript - 我如何解决可能的未处理承诺拒绝?