您可以使用 GetSystemMetrics 函数来获取屏幕分辨率和指针精确度的信息。例如,SM_CXSCREENSM_CYSCREEN 参数分别返回屏幕的宽度和高度,SM_CXDOUBLECLKSM_CYDOUBLECLK 参数分别返回鼠标的水平和垂直移动距离,在双击事件中被定义为双击的最大速度。您可以使用这些值来计算绝对坐标。例如:

int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
int pointerAccuracy = GetSystemMetrics(SM_CXDOUBLECLK); // or SM_CYDOUBLECLK
// ...
int absoluteX = relativeX * screenWidth / pointerAccuracy;
int absoluteY = relativeY * screenHeight / pointerAccuracy;

注意,这个公式仍然假定鼠标速度设置为默认值。如果用户更改了鼠标速度,您可能需要在计算绝对坐标时使用其他参数。您可以使用 GetMouseSpeed 函数来获取当前鼠标速度。例如:

MOUSE_SPEED currentSpeed;
if (SystemParametersInfo(SPI_GETMOUSESPEED, 0, &currentSpeed, 0)) {
    int absoluteX = relativeX * screenWidth / (pointerAccuracy * currentSpeed.x);
    int absoluteY = relativeY * screenHeight / (pointerAccuracy * currentSpeed.y);
    // ...
}

请注意,这种方法仍然有可能不准确,因为它忽略了用户将鼠标放置在屏幕边缘时的自动滚动行为。如果您需要更精确的鼠标控制,您可能需要使用更高级的输入 API,如 DirectInput 或 Raw Input。

Mouse_event 函数坐标偏差问题解决方法 - 准确计算鼠标位置

原文地址: https://www.cveoy.top/t/topic/ngl7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录