将光标移动到另一个应用程序中的指定位置

本文关键字:定位 位置 应用程序 光标 移动 另一个 | 更新日期: 2023-09-27 17:57:44

我有一款使用FPC和我的应用程序的游戏。游戏将光标锁定在屏幕中心,并在鼠标移动时移动游戏中的相机。我必须将光标移动到屏幕上的指定点(在游戏中)。我试过SetCursorPosSendInputmouseeventCursor.Position,但都没有。只有这个代码(我在某个地方找到了它,但我再也找不到了;)移动了鼠标,但位置不正确(如果游戏在顶部,其他功能什么都没做):

private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
private const int MOUSEEVENTF_MOVE = 0x0001;
public static void MoveTo(float x, float y)
{
    float min = 0;
    float max = UInt16.MaxValue;
    int mappedX = (int)Remap(x, 0.0f, Screen.PrimaryScreen.Bounds.Width, min, max);
    int mappedY = (int)Remap(y, 0.0f, Screen.PrimaryScreen.Bounds.Height, min, max);
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, mappedX, mappedY, 0, 0);
}

public static float Remap(float value, float from1, float to1, float from2, float to2)
{
    return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}

我认为这是因为光标仍然被锁定,所以函数仍然试图移动鼠标。我不知道该怎么做了。

[编辑]:问题是游戏使用了原始输入。如何发送鼠标输入,即使原始输入选项处于打开状态,也能按预期工作?

将光标移动到另一个应用程序中的指定位置

您需要使用像WinIO这样的内核模式库来模拟原始输入。(希望您自己的程序可以在用户模式下工作)