鼠标单击事件与显示缩放无关

本文关键字:缩放 显示 单击 事件 鼠标 | 更新日期: 2023-09-27 18:05:33

我试图将鼠标移动到一个位置(x, y),然后在控制台c#应用程序中使用以下代码单击它

[DllImport("user32.dll")]
    static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
    private const int MOUSEEVENTF_MOVE = 0x0001;
    private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
    private const int MOUSEEVENTF_LEFTUP = 0x0004;
    private const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
    private const int MOUSEEVENTF_RIGHTUP = 0x0010;
    private const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
    private const int MOUSEEVENTF_MIDDLEUP = 0x0040;
    private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
    public static void Move(int xDelta, int yDelta)
    {
        mouse_event(MOUSEEVENTF_MOVE, xDelta, yDelta, 0, 0);
    }
    public static void MoveTo(int x, int y)
    {
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0);
    }
     public static void LeftClick()
    {
        mouse_event(MOUSEEVENTF_LEFTDOWN, Cursor.Position.X, Cursor.Position.Y, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    } 
   /* public static void LeftClick(int x, int y)
    {
        mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
    }
    */
    public static void LeftDown()
    {
        mouse_event(MOUSEEVENTF_LEFTDOWN, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    }
    public static void LeftUp()
    {
        mouse_event(MOUSEEVENTF_LEFTUP, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    }
    public static void RightClick()
    {
        mouse_event(MOUSEEVENTF_RIGHTDOWN, Cursor.Position.X, Cursor.Position.Y, 0, 0);
        mouse_event(MOUSEEVENTF_RIGHTUP, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    }
    public static void RightDown()
    {
        mouse_event(MOUSEEVENTF_RIGHTDOWN, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    }
    public static void RightUp()
    {
        mouse_event(MOUSEEVENTF_RIGHTUP, Cursor.Position.X, Cursor.Position.Y, 0, 0);
    }
click_position()
{

Cursor.Position = new Point(xwidth, yheight);
LeftClick
}

如果显示缩放为100%,则工作正常,但如果显示缩放不是100%,则实际鼠标点击与鼠标坐标不同。请告诉我在控制台c#应用程序中点击屏幕的任何c#方法

鼠标单击事件与显示缩放无关

如果这是一个windows桌面应用程序,那么你不应该只在鼠标位置上执行点击,而应该在两个轴上减去你的窗口当前位置

例如:

public static void LeftClick() {
    Point mousePosOnScreen = Cursor.Position - this.Location;
    mouse_event(MOUSEEVENTF_LEFTDOWN, mousePosOnScreen.X, mousePosOnScreen.Y, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, mousePosOnScreen.X, mousePosOnScreen.Y, 0, 0);
} 

只是一个快速的解释,当你检查光标时,你做错了什么。Position将返回指针在显示器上的位置,而不是窗口上的位置。因此,通过减去窗口位置,您将最终得到鼠标指针在窗口上的位置。