2011-11-25 33 views
32

Điều tôi muốn làm là thao tác chuột. Nó sẽ là một macro đơn giản cho mục đích của riêng tôi. Vì vậy, nó sẽ di chuyển chuột của tôi đến vị trí nhất định trên màn hình và nhấp như tôi đang nhấp vào với khoảng thời gian nhất định.Làm cách nào tôi có thể mô phỏng nhấp chuột tại một vị trí nhất định trên màn hình?

+1

Có [this] (http://stackoverflow.com/questions/8242409/simulate-mouse-clicks-at-a-certain-position-on-inactive-window-in-c-sharp/8242484#8242484) là những gì bạn cần? Ngoài ra, như một người nào đó đề xuất trong các ý kiến, bạn có thể muốn sử dụng UIAutomation. – Nasreddine

+1

cảm ơn làm việc :) – MonsterMMORPG

+1

không sao làm việc rất tốt. làm cách nào tôi có thể đặt thời lượng nhấp chuột. như 100 ms tiếp tục nhấn chuột – MonsterMMORPG

Trả lời

43

Dưới đây là một mã được sử dụng các chức năng không được quản lý để mô phỏng cú click chuột:

//This is a replacement for Cursor.Position in WinForms 
[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool SetCursorPos(int x, int y); 

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

public const int MOUSEEVENTF_LEFTDOWN = 0x02; 
public const int MOUSEEVENTF_LEFTUP = 0x04; 

//This simulates a left mouse click 
public static void LeftMouseClick(int xpos, int ypos) 
{ 
    SetCursorPos(xpos, ypos); 
    mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
    mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 
} 

Để giữ chuột được bấm trong một khoảng thời gian cụ thể, bạn có thể Sleep() chuỗi đang thực hiện chức năng này, ví dụ:

mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0); 
System.Threading.Thread.Sleep(1000); 
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0); 

Mã trên sẽ giữ chuột được bấm trong 1 giây trừ khi người dùng nhấn nút nhả chuột. Ngoài ra, hãy đảm bảo không thực thi mã này trên chuỗi giao diện người dùng chính vì nó sẽ khiến mã đó bị treo.

+1

Đây là FAR đơn giản hơn các giải pháp khác tôi đã thấy ở đây. Cảm ơn – Yablargo

+0

Mã này hoạt động tốt để đưa con trỏ đến tọa độ mong muốn trên màn hình nhưng vì lý do nào đó, nhấp chuột không hoạt động đối với tôi. Bất kỳ ý tưởng tại sao? – john

+0

Ở đây bạn có thể có mã cho các nút chuột khác: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx – Li3ro

7

Bạn có thể di chuyển theo vị trí XY. Ví dụ dưới đây:

windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30) 

Để nhấp chuột, bạn có thể sử dụng đoạn mã sau:

using System.Runtime.InteropServices; 

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002; 
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004; 
[DllImport("user32.dll")] 
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,    uint dwExtraInf); 
private void btnSet_Click(object sender, EventArgs e) 
    { 
     int x = Convert.ToInt16(txtX.Text);//set x position 
     int y = Convert.ToInt16(txtY.Text);//set y position 
     Cursor.Position = new Point(x, y); 
     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down 
     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up 
    } 

tín dụng để JOHNYKUTTY

+1

Câu hỏi đặt ra là trên WPF, không phải Biểu mẫu. – Vlad

+1

không hoạt động: windows.Forms.Cursor.Position = New System.Drawing.Point (Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30). tôi cũng đã thử này ở các hình thức không đề cập đến sẽ không làm việc tại wpf – MonsterMMORPG

Các vấn đề liên quan