作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我通过以下方式登录时,尝试从 RAWMOUSE
结构的 lLastX
和 lLastY
成员更新鼠标位置时RDP,我得到了一些非常奇怪的数字(例如两者都> 30,000)。我在 Windows 7、8、8.1 和 10 上注意到了这种行为。
usFlags 成员返回值 MOUSE_MOVE_ABSOLUTE | MOUSE_VIRTUAL_DESKTOP
。关于 MOUSE_MOVE_ABSOLUTE,我在代码中处理绝对定位和相对定位。然而,虚拟桌面标志让我有点困惑,因为我认为该标志用于多显示器设置。我有一种感觉,这面旗帜和我得到的奇怪数字有联系。不幸的是,我真的不知道如何在没有引用点的情况下调整这些值,我什至不知道如何获得引用点。
当我在本地运行代码时,一切都按预期运行。
那么有谁知道为什么 RDP + 原始输入会给我如此困惑的鼠标 Lastx/lasty 值?如果是这样,有没有办法将它们转换为更合理的值?
最佳答案
看来,当通过远程桌面使用WM_INPUT
时,MOUSE_MOVE_ABSOLUTE
和MOUSE_VIRTUAL_DESKTOP
位被设置,并且值的范围似乎是0
到 USHRT_MAX
。
我从未真正找到明确的文档说明设置 MOUSE_VIRTUAL_DESKTOP
位时使用哪个坐标系,但这似乎到目前为止效果很好:
case WM_INPUT: {
UINT buffer_size = 48;
LPBYTE buffer[48];
GetRawInputData((HRAWINPUT)lparam, RID_INPUT, buffer, &buffer_size, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)buffer;
if (raw->header.dwType != RIM_TYPEMOUSE) {
break;
}
const RAWMOUSE& mouse = raw->data.mouse;
if ((mouse.usFlags & MOUSE_MOVE_ABSOLUTE) == MOUSE_MOVE_ABSOLUTE) {
static Vector3 last_pos = vector3(FLT_MAX, FLT_MAX, FLT_MAX);
const bool virtual_desktop = (mouse.usFlags & MOUSE_VIRTUAL_DESKTOP) == MOUSE_VIRTUAL_DESKTOP;
const int width = GetSystemMetrics(virtual_desktop ? SM_CXVIRTUALSCREEN : SM_CXSCREEN);
const int height = GetSystemMetrics(virtual_desktop ? SM_CYVIRTUALSCREEN : SM_CYSCREEN);
const Vector3 absolute_pos = vector3((mouse.lLastX / float(USHRT_MAX)) * width, (mouse.lLastY / float(USHRT_MAX)) * height, 0);
if (last_pos != vector3(FLT_MAX, FLT_MAX, FLT_MAX)) {
MouseMoveEvent(absolute_pos - last_pos);
}
last_pos = absolute_pos;
}
else {
MouseMoveEvent(vector3((float)mouse.lLastX, (float)mouse.lLastY, 0));
}
}
break;
关于rdp - 通过 RDP 登录时原始输入鼠标lastx、lasty 具有奇数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949476/
我是一名优秀的程序员,十分优秀!