2012-11-22 56 views
12

Tôi đang làm việc trên Ứng dụng biểu mẫu Windows trong C#, Khung 4 (32 bit).Di chuyển chuột đến vị trí và nhấp chuột trái

Tôi có một danh sách chứa coords của chuột và tôi có thể chụp chúng. Càng xa càng tốt.

Nhưng tại một thời điểm nào đó, tôi muốn đi đến các hợp âm đó và nhấp chuột trái vào nó.

Đây là cách có vẻ như ngay bây giờ:

for (int i = 0; i < coordsX.Count; i++) 
{ 
    Cursor.Position = new Point(coordsX[i], coordsY[i]); 
    Application.DoEvents(); 
    Clicking.SendClick(); 
} 

Và lớp Nhấp:

class Clicking 
    { 
     private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002; 
     private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004; 
     private static extern void mouse_event(
       UInt32 dwFlags, // motion and click options 
       UInt32 dx, // horizontal position or change 
       UInt32 dy, // vertical position or change 
       UInt32 dwData, // wheel movement 
       IntPtr dwExtraInfo // application-defined information 
     ); 

     // public static void SendClick(Point location) 
     public static void SendClick() 
     { 
      // Cursor.Position = location; 
      mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr()); 
      mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr()); 
     } 
    } 

Nhưng tôi nhận được lỗi này:

Could not load type 'program.Clicking' from assembly 'program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'mouse_event' has no implementation (no RVA). 

Và tôi thực sự không hiểu vấn đề là gì ... Các bạn có biết vấn đề là gì không? hoặc bạn có biết cách tốt hơn để làm những gì tôi đang cố gắng làm không?

Trả lời

8

Bạn đã bao gồm các dòng sau?

[DllImport("user32.dll")] 
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, 
    UIntPtr dwExtraInfo); 

này sẽ nhập khẩu chức năng mouse_event từ user32 dll, đó là những gì bạn đang cố gắng để sử dụng trong chương trình của bạn. Hiện tại, chương trình của bạn không biết về phương thức này trong DLL cho đến khi bạn xác định nó đến từ đâu.

Trang web PInvoke.net user32 Mouse Event khá tiện lợi cho những điều cơ bản về loại điều này.

Câu trả lời cho Directing mouse events [DllImport(“user32.dll”)] click, double click cũng sẽ giúp ích rất nhiều cho sự hiểu biết của bạn.

Các flags là gì lệnh bạn muốn gửi vào mouse_input chức năng, trong ví dụ mà bạn có thể thấy rằng ông đang gửi cả mouse downmouse up trong cùng một dòng, điều này là tốt vì mouse_event chức năng sẽ chia những lá cờ lên và thực hiện chúng liên tục.


Cũng lưu ý rằng phương pháp này đã được thay thế bởi SendInput lệnh, một ví dụ tốt về SendInputSetMousePos thể được tìm thấy At this Blog

+0

Tôi đã chèn dòng đó vào lớp nhấp chuột, nhưng vẫn lỗi tương tự – Mathlight

+0

Bạn có xóa quá trình giải mã của bạn về 'mouse_event' không? chắc chắn rằng bạn làm điều đó và thay thế nó bằng cách này. – Serdalis

+0

Và làm thế nào mà sendinput sẽ làm việc cụ thể cho câu hỏi của tôi? bởi vì tôi mới biết điều này, và tôi không biết nếu tôi cần tất cả các mã từ các liên kết ... – Mathlight

1

Tôi đoán bạn đang thiếu dòng sau

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
+0

rằng trows lỗi: Thuộc tính 'DllImport' không hợp lệ vào loại khai này . Nó chỉ hợp lệ trên các khai báo 'phương thức'. – Mathlight

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