2010-04-29 47 views
6

Làm cách nào tôi có thể kích hoạt sự kiện nhấp chuột trái phép theo chương trình trên chuột?Làm thế nào để kích hoạt một cách nhấp chuột trái chuột trong C#?

Cảm ơn.

chỉnh sửa: sự kiện không được kích hoạt trực tiếp trên nút. Tôi đang nhắm đến nền tảng Windows.

+2

Trong nền tảng nào? Winforms? WPF? Silverlight? biểu mẫu web (= html/javascript)? Hoặc chỉ là "cửa sổ" (mức thấp) –

+0

Bản sao có thể có của [Cách mô phỏng Chuột Nhấp chuột trong C#?] (Http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c) – AlexanderMP

Trả lời

1

https://web.archive.org/web/20140214230712/http://www.pinvoke.net/default.aspx/user32.sendinput

Sử dụng API Win32 để gửi đầu vào.

Cập nhật:

Kể từ khi tôi không còn làm việc với Win32 API, tôi sẽ không cập nhật câu trả lời này là đúng khi thay đổi nền tảng hoặc các trang web trở thành không có. Vì câu trả lời này thậm chí không phù hợp với các tiêu chuẩn Stackoverflow (không chứa câu trả lời chính nó, mà là một liên kết đến một tài nguyên bên ngoài, hiện không tồn tại), không có điểm nào cho nó bất kỳ điểm nào hoặc dành nhiều thời gian hơn cho nó.

Thay vào đó, hãy nhìn vào câu hỏi này trên Stackoverflow, mà tôi nghĩ là một bản sao:

How to simulate Mouse Click in C#?

+0

Tôi thấy rằng không hoạt động, ví dụ: trình gỡ rối studio trực quan đặt một dòng dưới 'UINT' và dưới' INPUT [] 'Tôi thấy không có lớp như UINT mặc dù tôi có thể thay đổi thành UInt32 Nhưng tôi không thay đổi tương đương sẽ thành INPUT [] thành làm cho nó hoạt động – barlop

+0

@barlop cảm ơn vì đã đào bới di tích này :) và tôi xin lỗi vì tôi không thể giúp bạn với điều này. Tôi đã đánh dấu nó là không được chấp nhận. Tìm ra câu trả lời tốt hơn, cho ví dụ. tại đây http://stackoverflow.com/questions/2416748/how-to-simulate-mouse-click-in-c – AlexanderMP

+0

Bạn đang đánh giá thấp tính hợp lệ của câu trả lời của bạn Andrei đã nói rằng giải pháp mouse_event đã lỗi thời và giải pháp SendInput của bạn là càng được cập nhật .. Và trong câu hỏi bạn đã liên kết, câu trả lời được đánh giá cao nhất có giải pháp mouse_event .. Vì vậy câu trả lời của bạn có thể được cập nhật nhiều hơn so với câu trả lời ở đó. Và chỉ vì một trang web tốt, pinvoke đã bị tấn công hoặc chuyển hướng đến công ty phần mềm redgate, không có nghĩa là thông tin trên trang web đã lỗi thời. Trong thực tế, trang chính của trang web pinvoke tại thời điểm này nói xuống để bảo trì. – barlop

8

Nếu đó là chuột phải vào một nút, bạn có thể sử dụng

button1.PerformClick(); 

Nếu không, bạn có thể kiểm tra this MSDN article mà thảo luận về mô phỏng chuột (và bàn phím) đầu vào.

Ngoài ra, this project cũng có thể giúp bạn. Dưới nắp, nó sử dụng SendInput.

+0

Thật kỳ quặc với tôi rằng Java dường như có hỗ trợ tích hợp tốt hơn C# để dễ dàng kích chuột vào Windows ở một vị trí tùy ý, nhưng thư viện InputSimulator chỉ là những gì tôi đang tìm kiếm. Bạn nên làm cho điều đó nổi bật hơn trong câu trả lời của bạn. – rob

8

Để thực hiện một cú click chuột:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
     public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long 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; 

     public static void DoMouseClick() 
     { 
      mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
     } 

Để di chuyển con trỏ nơi bạn muốn:

[DllImport("user32.dll")] 
     static extern bool SetCursorPos(int X, int Y); 

     public static void MoveCursorToPoint(int x, int y) 
     { 
      SetCursorPos(x, y); 
     } 
+2

Tôi thấy cái này, đã thử nó, nhưng hàm mouse_event đã lỗi thời. Tôi đang cố gắng làm điều tương tự với SendInput ngay bây giờ. – Andrei

+0

Ngoài mouse_event đang được thay thế bởi SendInput như Andrei đã chỉ ra, bạn có thể chuyển vị trí chuột bằng cách thiết lập mặt nạ MOUSEEVENTF_ABSOLUTE trong đối số đầu tiên và truyền các coords x và y trong arg thứ hai và thứ ba, thay vì gọi SetCursorPos trước. – rob

+0

Tôi sẽ thử với phương pháp này vì (như bình luận về câu trả lời gửi), SendInput đã không làm việc cho tôi. Với phương pháp này, tôi nhận được một lỗi 'Quản lý gỡ lỗi được quản lý' PInvokeStackImbalance 'đã phát hiện ra một vấn đề trong' C: \ Use ..... \ Debug \ hprog.vshost.exe '. Thông tin bổ sung: Cuộc gọi đến chức năng PInvoke 'prog1! Prog1.FrmBlah :: mouse_event' đã không cân bằng chồng. Điều này có thể do chữ ký PInvoke được quản lý không khớp với chữ ký đích không được quản lý. Kiểm tra quy ước và tham số gọi của chữ ký PInvoke khớp với chữ ký không được quản lý đích. – barlop

-1
button1_click(null, new EventArgs()); 
Các vấn đề liên quan