gpt4 book ai didi

rdp - 通过 RDP 登录时原始输入鼠标lastx、lasty 具有奇数值

转载 作者:行者123 更新时间:2023-12-01 20:05:23 26 4
gpt4 key购买 nike

当我通过以下方式登录时,尝试从 RAWMOUSE 结构的 lLastXlLastY 成员更新鼠标位置时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_ABSOLUTEMOUSE_VIRTUAL_DESKTOP位被设置,并且值的范围似乎是0USHRT_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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com