Làm thế nào để di chuyển con trỏ chuột bằng C #?


81

Tôi muốn mô phỏng chuyển động của chuột mỗi x giây. Đối với điều đó, tôi sẽ sử dụng bộ đếm thời gian (x giây) và khi bộ đếm thời gian tích tắc, tôi sẽ thực hiện chuyển động chuột.

Nhưng, làm cách nào để làm cho con trỏ chuột di chuyển bằng C #?


3
Điều này nghe có vẻ là một nửa giải pháp cho một vấn đề mà bạn không nói cho chúng tôi biết, có lẽ có nhiều giải pháp thanh lịch hơn.
Damien_The_Un Believer

Nó hoàn toàn có thể! Chúng tôi không hiểu tại sao nhưng trình bảo vệ màn hình được kích hoạt sau 10 phút. Nhưng chúng tôi đặt 999 phút: P
aF.

3
Sau đó, bạn nên tìm kiếm các giải pháp ngăn trình bảo vệ màn hình kích hoạt khi ứng dụng của bạn đang chạy, thay vì loay hoay với chuột hoặc cài đặt trình bảo vệ màn hình. Ví dụ: P / Gọi SetThreadExecutionState . Tôi nghi ngờ điều này có liên quan đến bảo vệ màn hình - các chuyển động chuột được lập trình không đặt lại bộ hẹn giờ bảo vệ màn hình.
Damien_The_Un Believer

Câu trả lời:


86

Hãy xem Cursor.PositionTài sản . Nó sẽ giúp bạn bắt đầu.

private void MoveCursor()
{
   // Set the Current cursor, move the cursor's Position,
   // and set its clipping rectangle to the form. 

   this.Cursor = new Cursor(Cursor.Current.Handle);
   Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50);
   Cursor.Clip = new Rectangle(this.Location, this.Size);
}

1
Cảm ơn @JamesHill, tôi không nhớ làm thế nào để làm điều này và ví dụ của bạn là tuyệt vời. Tôi trường hợp của tôi, tôi đã thêm một số tính toán để x và y để làm cho thời gian di chuyển chuột liên quan (pixel per second)
Pimenta

2
Đây có phải là cách tiếp cận WinForms?
greenoldman,

14
Tôi cảm thấy mình nên đề cập đến điều này để ai đó không vướng vào vấn đề vui nhộn mà tôi vừa gặp phải. Cursor.Clipsẽ hạn chế chuyển động của chuột ở kích thước được chỉ định bởi LocationSize. Vì vậy, đoạn mã trên sẽ chỉ cho phép chuột của bạn di chuyển trong hộp giới hạn của ứng dụng.
Brandon

Cursor.Positioncó thể yêu cầu một cài đặt nhất định nếu được sử dụng trong máy ảo .
Pollitzer

Hoạt động tốt và nếu dòng Cursor.Clip bị xóa, nó cũng hoạt động khi cửa sổ được thu nhỏ.
Ben

30

Đầu tiên, hãy thêm một lớp có tên Win32.cs

public class Win32
{ 
    [DllImport("User32.Dll")]
    public static extern long SetCursorPos(int x, int y);

    [DllImport("User32.Dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int x;
        public int y;

        public POINT(int X, int Y)
        {
            x = X;
            y = Y;
        }
    }
}

Bạn có thể sử dụng nó sau đó như thế này:

Win32.POINT p = new Win32.POINT(xPos, yPos);

Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);

Ngoài ra trong WinForm, bạn có thể sử dụng Cursor.Position = new Point (x, y);
user3290286

Loại POINT từ đâu?
RollRoll

Làm thế nào để bạn có được vị trí con trỏ chuột bằng cách sử dụng phương pháp này?
barlop

điều này là tốt .. cần lưu ý rằng điều này liên quan đến phía trên bên trái của biểu mẫu. Vì vậy, đó là cùng một tọa độ được sử dụng bởi ví dụ: một điều khiển trên một biểu mẫu và cùng một tọa độ được sử dụng trong (và - để trả lời q của tôi trong nhận xét của tôi ở trên - có thể lấy từ), MouseEventArgs e, ví dụ như phương thức MouseMove của Biểu mẫu.
barlop
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.