C# 如何将鼠标光标设置为X、Y坐标,单击鼠标左键并向左、右、上、下滚动

C# 如何将鼠标光标设置为X、Y坐标,单击鼠标左键并向左、右、上、下滚动,c#,C#,如标题所述,我一直在尝试通过使用Cursor.Position=new Point(58128)来搜索设置鼠标坐标的方法然后按住鼠标左键(向下)尝试滚动到另一个方向(随机方向)。例如,如果我要进入Google Earth并将光标位置设置为0,0,光标将在地图上滚动。如果有人能帮忙,我一定会很感激的 谢谢 解决方案:floatas,再次感谢您回复此帖子。我花了昨天和今天的时间试图弄明白这一点,最后我终于让它起作用了。我将发布我的代码,希望这对其他人有所帮助。首先,您需要导入一些函数 要更改光标位置

如标题所述,我一直在尝试通过使用
Cursor.Position=new Point(58128)来搜索设置鼠标坐标的方法然后按住鼠标左键(向下)尝试滚动到另一个方向(随机方向)。例如,如果我要进入Google Earth并将光标位置设置为
0,0
,光标将在地图上滚动。如果有人能帮忙,我一定会很感激的

谢谢


解决方案:floatas,再次感谢您回复此帖子。我花了昨天和今天的时间试图弄明白这一点,最后我终于让它起作用了。我将发布我的代码,希望这对其他人有所帮助。

首先,您需要导入一些函数

要更改光标位置,请执行以下操作:

   [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetCursorPos(
        [In] int X,
        [In] int Y);
要模拟鼠标事件,请执行以下操作:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(
    [In] uint dwFlags,
    [In] uint dx,
    [In] uint dy,
    [In] int dwData,
    [In] uint dwExtraInfo);
public enum MouseEvents
{
    MOUSEEVENTF_LEFTDOWN = 0x02,
    MOUSEEVENTF_LEFTUP = 0x04,
    MOUSEEVENTF_RIGHTDOWN = 0x08,
    MOUSEEVENTF_RIGHTUP = 0x10,
    MOUSEEVENTF_WHEEL = 0x0800,
}
可能的鼠标事件:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(
    [In] uint dwFlags,
    [In] uint dx,
    [In] uint dy,
    [In] int dwData,
    [In] uint dwExtraInfo);
public enum MouseEvents
{
    MOUSEEVENTF_LEFTDOWN = 0x02,
    MOUSEEVENTF_LEFTUP = 0x04,
    MOUSEEVENTF_RIGHTDOWN = 0x08,
    MOUSEEVENTF_RIGHTUP = 0x10,
    MOUSEEVENTF_WHEEL = 0x0800,
}
您可以将鼠标上下移动,模拟单击:

mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTDOWN | (uint)MouseEvents.MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
未对此进行测试,但应按下鼠标,拖动并释放:

mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
SetCursorPos((int)X+10, (int)Y+10);
mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTUP, X+10, Y+10, 0, 0);

你不能在更高、更语义的层次上工作吗?即,使用或公开的API?Pleaes@JordanMiller,不要编辑问题以将答案放入内部。如果有必要,给自己贴一个答案,然后验证它。也不要更新标题。@jordan请在继续使用前阅读。这不是一个论坛,规则完全不同。如果你想回答你自己的问题,那就发布一个答案。答案旁边的复选标记用于选择帮助您解决问题的答案。我是新手,因此如果我做错了,我向您道歉。