在c# Web浏览器上模拟一个特定点的点击

本文关键字:一个 Web 浏览器 模拟 | 更新日期: 2023-09-27 18:13:10

我正在尝试在我的网络浏览器中强制鼠标点击特定点。

我使用下面的代码:

    public void DoMouseClick(int X, int Y)
    {
        //Call the imported function with the cursor's current position
        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
    }

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void mouse_event(uint dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
    private const int MOUSEEVENTF_LEFTDOWN = 0x02;
    private const int MOUSEEVENTF_LEFTUP = 0x04;
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
    private const int MOUSEEVENTF_RIGHTUP = 0x10;

然而,这段代码似乎没有工作,它没有点击那里?我也不确定这段代码是否真的移动了物理鼠标,我需要一些东西来模拟点击,而不是移动我的鼠标,并进行点击。

我不能使用HTMLElement的东西,因为它不允许你点击元素中的特定坐标,我需要,我需要点击一个非常特定的位置。

有谁能帮帮忙吗

在c# Web浏览器上模拟一个特定点的点击

我得到了这个,我用它来做一些自动点击器的东西。我不能也不会为此邀功,我甚至认为我在stackoverflow上找到了代码。

[Flags]
public enum MouseEventFlags
{
    LeftDown = 0x00000002,
    LeftUp = 0x00000004,
    MiddleDown = 0x00000020,
    MiddleUp = 0x00000040,
    Move = 0x00000001,
    Absolute = 0x00008000,
    RightDown = 0x00000008,
    RightUp = 0x00000010
}
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetCursorPos(out MousePoint lpMousePoint);
[DllImport("user32.dll")]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
public static void SetCursorPosition(int X, int Y)
{
    SetCursorPos(X, Y);
}
public static void SetCursorPosition(MousePoint point)
{
    SetCursorPos(point.X, point.Y);
}
public static MousePoint GetCursorPosition()
{
    MousePoint currentMousePoint;
    var gotPoint = GetCursorPos(out currentMousePoint);
    if (!gotPoint) { currentMousePoint = new MousePoint(0, 0); }
    return currentMousePoint;
}
public static void MouseEvent(MouseEventFlags value)
{
    MousePoint position = GetCursorPosition();
    mouse_event
        ((int)value,
         position.X,
         position.Y,
         0,
         0)
        ;
}
[StructLayout(LayoutKind.Sequential)]
public struct MousePoint
{
    public int X;
    public int Y;
    public MousePoint(int x, int y)
    {
        X = x;
        Y = y;
    }
}