将光标移动到另一个应用程序中的指定位置
本文关键字:定位 位置 应用程序 光标 移动 另一个 | 更新日期: 2023-09-27 17:57:44
我有一款使用FPC和我的应用程序的游戏。游戏将光标锁定在屏幕中心,并在鼠标移动时移动游戏中的相机。我必须将光标移动到屏幕上的指定点(在游戏中)。我试过SetCursorPos
、SendInput
、mouseevent
和Cursor.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
这样的内核模式库来模拟原始输入。(希望您自己的程序可以在用户模式下工作)