Làm cách nào để mô phỏng chuột và bàn phím bằng C # hoặc C ++?


8

Tôi muốn bắt đầu phát triển cho Kinect, nhưng chủ đề khó nhất cho nó - cách gửi đầu vào bàn phím và chuột đến bất kỳ ứng dụng nào. Trong câu hỏi trước tôi đã có một lời khuyên để phát triển trình điều khiển riêng cho thiết bị này, nhưng điều này sẽ mất một lúc.

Tôi tưởng tượng ứng dụng giống như một cái cổng, có thể dịch SendMessage thành đầu vào toàn hệ thống hoặc ứng dụng trình điều khiển với API để gửi đầu vào này. Vì vậy, tôi tự hỏi, có trình điều khiển hoặc giả lập có thể tương tác với C # hoặc C ++?

Phiên bản nhỏ: SendMessage, PostMessage, keybd_event sẽ chỉ hoạt động trên ứng dụng Windows với vòng lặp thông báo phổ biến. Vì vậy, tôi cần ứng dụng trình điều khiển sẽ hoạt động ở mức thấp, kernel, level.


Âm thanh như bạn có thể quan tâm đến phần mềm như Auto Hot Key mô phỏng các lần nhấn phím và tương tự với ứng dụng khác ... tuy nhiên không hoàn toàn chắc chắn .. vì vậy chỉ cần một nhận xét.
James

2
Trình điều khiển với API, sẽ mô phỏng bàn phím thực.
Dracontis

Bạn có thể gặp nhiều may mắn hơn trên StackOverflow, câu hỏi này có lẽ ở mức độ thấp hơn thì phần lớn người dùng ở đây có kinh nghiệm. Tôi có thể sai.
giảm tốc

Tôi không thể đặt câu hỏi trên StackOverflow.
Dracontis

Tại sao không? Stackoverflow chắc chắn là một nơi tuyệt vời để gửi câu hỏi như thế này.
ultifinitus

Câu trả lời:


2

Đối với Ứng dụng C #:

Để di chuyển chuột, lớp Con trỏ là bạn của chúng ta, vì Coder.Pocation có thể được sử dụng để di chuyển chuột.

Để mô phỏng các lần nhấn phím, lớp Sendkeys là bạn của bạn, với SendKeys.Send () được sử dụng để mô phỏng một lần nhấn bàn phím

Để nhấp chuột, tôi biết không có trình bao bọc đẹp, nhưng mã này sẽ hoạt động:

[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;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;

public void MouseClick()
{
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}

(Chỉ cần thay x và y bằng vị trí chuột thực tế, có thể sử dụng lại lớp Con trỏ)

Ngoài ra, bạn có thể sử dụng một cái gì đó như Thư viện Bàn phím và Chuột Toàn cầu từ CodeProject để có giao diện đơn giản và gọn gàng cho toàn bộ quá trình


1
Thật không may, điều này sẽ không hoạt động cho các ứng dụng DirectInput / XInput.
Jonathan Dickinson

Sự kiện sẽ không hoạt động trong mọi ứng dụng. Có thể đôi khi trò chơi sẽ được kết nối với vòng lặp thông báo chung và thư viện hoặc chức năng này sẽ hoạt động, nhưng không phải trong mỗi người. Tôi cần ứng dụng giống như trình điều khiển.
Dracontis

2

Những gì bạn cần là tạo trình điều khiển hệ thống cho thiết bị giao diện người, HID. Lời khuyên trước đây để tạo trình điều khiển là chính xác bởi vì, như bạn nhận thấy, bạn không thể đơn giản đi nhồi các sự kiện vào các hệ thống cấp cao hơn và có phạm vi bảo hiểm toàn cầu.

Bạn có thể muốn bắt đầu ở đây: nhập mô tả liên kết tại đây và sau đó tiếp tục tìm kiếm xung quanh MSDN cho các mẫu trình điều khiển để làm cơ sở cho công việc của bạn.


1
Tôi cũng muốn thêm rằng nếu bạn sử dụng phương pháp SendMessage, bạn sẽ cần UIAccess = true trong bảng kê khai của bạn để tương tác với các ứng dụng được khởi chạy với tư cách Quản trị viên. Làm như vậy đòi hỏi bạn phải có mã số được ký điện tử (đắt tiền). Viết trình điều khiển thiết bị là một giải pháp tốt hơn / đúng hơn nhưng nó cũng yêu cầu trình điều khiển đã ký trên x64.
NtscCobalt

1

Chà, cách tốt nhất để làm điều đó là tạo trình điều khiển bàn phím / chuột của riêng bạn bằng WDK. Đó là giải pháp chính xác và ưa nhìn, nhưng sẽ mất rất nhiều thời gian nếu bạn là người mới lập trình.

Giải pháp khác là sử dụng Găng tay . Bạn có thể viết ra kịch bản của riêng bạn và sau đó sử dụng nó. Vì vậy, sau đó bạn sẽ cần gửi tin nhắn với ứng dụng của mình tới Găng tay và nó sẽ tạo đầu vào ở cấp Kernel, do đó, điều này sẽ hoạt động trong các trò chơi DirectX và các ứng dụng vòng lặp tin nhắn.

Chà, thực sự tôi muốn một cái gì đó như thế này, nhưng với khả năng chạy như là quá trình nền (Găng tay bắt đầu với chế độ cửa sổ và sau đó bạn có thể biến nó) hoặc có thể là thư viện. Nếu tôi tìm thấy một cái gì đó khác, tôi sẽ cập nhật câu trả lời.

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.