Tôi cần điều khiển ứng dụng khác bằng cách mô phỏng thao tác di chuyển chuột và bàn phím. Làm thế nào để thực hiện điều này trong C#? Thậm chí có thể không?Điều khiển ứng dụng khác bằng C#
Trả lời
Mẫu mã:
Application application = Application.Launch("foo.exe");
Window window = application.GetWindow("bar", InitializeOption.NoCache);
Button button = window.Get<Button>("save");
button.Click();
Tôi không nghĩ rằng nó có thể nhận được nhiều hơn thế. Thư viện được tạo bởi ThoughtWorks.
có phải là một liên kết xấu hoặc đã làm codeplex chỉ cần ném một conniption? –
Tôi đang cố gắng duyệt qua tài liệu của dự án White và nó bắt đầu đưa ra lỗi! BTW, 'Trắng' sẽ cung cấp cho bạn cách tiếp cận OO để kiểm soát các ứng dụng dựa trên Windows. – SolutionYogi
Trắng có vẻ giống như một tuyến đường tốt. Tôi sẽ xem xét điều đó. – Salamander2007
Xem "Để gửi một phím tắt để một ứng dụng khác nhau" trên trang này:
Sử dụng SendMessage API Win32 gốc. DllImport phương pháp này từ User32.dll. Bạn có thể sử dụng API này để gửi cả bàn phím & thông điệp chuột
Bạn có thể sử dụng p/gọi, tôi đã đánh cắp các mã sau đây cho cú click chuột tại các điểm ngẫu nhiên vào một nút với một tay cầm nổi tiếng:
[Flags]
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
[StructLayout(LayoutKind.Sequential)]
public struct Rectangle
{
public int X;
public int Y;
public int Width;
public int Height;
}
private static void Click(IntPtr Handle)
{
lock (typeof(MouseAction))
{
Rectangle buttonDesign;
GetWindowRect(Handle, out buttonDesign);
Random r = new Random();
int curX = 10 + buttonDesign.X + r.Next(100 - 20);
int curY = 10 + buttonDesign.Y + r.Next(60 - 20);
SetCursorPos(curX, curY);
//Mouse Right Down and Mouse Right Up
mouse_event((uint)MouseEventFlags.LEFTDOWN, curX, curY, 0, 0);
mouse_event((uint)MouseEventFlags.LEFTUP, curX, curY, 0, 0);
}
}
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
private static extern void mouse_event(
long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr hWnd, out Rectangle rect);
bạn có thể sử dụng AutoIT, đó là phần mềm miễn phí và có phiên bản dll mà bạn có thể nhập vào C# (DllImport). Nó cho phép bạn bấm vào điều khiển, viết chuỗi để chỉnh sửa hộp, thực hiện lựa chọn combobox vv trên một ứng dụng khác từ C#.
Tôi cố gắng để làm như vậy: sử dụng chuột i sử dụng lớp này
(bạn cần phải thêm using System.Runtime.InteropServices;
)
public class MouseClick1 //public is important here**
{
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint 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 int CoordX { get; set; }
public int CoordY { get; set; }
public void Click1()
{
Cursor.Position = new Point(CoordX, CoordY);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
}
và sau khi vào Form1 của bạn (giả sử tên là Form1) bạn có thể
public partial class form1 : Form
{
MouseClick1 button1 = new MouseClick1();
MouseClick1 button2 = new MouseClick1();
[...]
public void Simulate_button1and2_Click(object sender, EventArgs e)
{
button1.CoordX = 1652; //random coordinates
button1.CoordY = 225;
button2.CoordX = 1650;
button2.CoordY = 250;
button1.Click1();
button1.Click2();
}}
Để có tọa độ trên con trỏ của bạn, tôi sử dụng một bộ đếm thời gian và một label:
private void timer1_Tick(object sender, EventArgs e)
{
Coord.Text = Cursor.Position.X.ToString() + " : " + Cursor.Position.Y.ToString(); //Premet d'avoir les coord en direct
}
tốt Làm việc với tôi.
- 1. Chạy ứng dụng bảng điều khiển trên màn hình khác
- 2. Xuất bản ứng dụng giao diện điều khiển C#
- 3. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 4. Điều gì xảy ra khi tôi ngắt một ứng dụng giao diện điều khiển C# bằng Control-C?
- 5. Biểu tượng ứng dụng giao diện điều khiển C#
- 6. Viết ứng dụng trong C cho vi điều khiển
- 7. C# Ngăn ứng dụng Bảng điều khiển xây dựng dưới dạng ứng dụng Windows từ thoát?
- 8. Gửi tin nhắn từ một ứng dụng bàn điều khiển đang chạy đến một ứng dụng khác đang chạy trên bàn điều khiển khác
- 9. Điều gì tạo ra ứng dụng Bảng điều khiển ứng dụng hoặc Windows Form?
- 10. Một bộ điều khiển hiển thị bằng cách sử dụng các chế độ xem của bộ điều khiển khác
- 11. Ứng dụng Bảng điều khiển Javascript?
- 12. Điều gì sẽ xảy ra khi bạn đóng ứng dụng bảng điều khiển C++
- 13. có thể gắn điều khiển với điều khiển khác không?
- 14. Có thể sử dụng HttpBrowserCapabilities từ một ứng dụng giao diện điều khiển C# không?
- 15. Sử dụng tài nguyên nhúng trong ứng dụng giao diện điều khiển C#
- 16. Ứng dụng Bàn điều khiển Win32 so với ứng dụng CLR Console
- 17. Cách bật các điều khiển chung trong ứng dụng Windows
- 18. Ứng dụng giao diện điều khiển đa luồng C# - Bàn điều khiển thoát trước khi hoàn thành các chủ đề
- 19. Cách xử lý^C trong các ứng dụng bảng điều khiển JVM?
- 20. Đặt thuộc tính bộ điều khiển trên bộ điều khiển ứng dụng sau khi ứng dụng sẵn sàng
- 21. C# Chụp màn hình điều khiển .net trong ứng dụng và đính kèm vào Outlook Email
- 22. Chèn điều khiển trước một điều khiển khác
- 23. Điều khiển hiển thị trên một bảng điều khiển khác
- 24. Ứng dụng bảng điều khiển Spring được định cấu hình bằng cách sử dụng chú thích
- 25. C# Các thành phần và điều khiển giấy phép ứng dụng
- 26. Không thể sử dụng MongoDB từ ứng dụng bàn điều khiển C#
- 27. Tìm tất cả các bộ điều khiển trong ứng dụng
- 28. Mô phỏng nhấn phím trong ứng dụng giao diện điều khiển Linux C
- 29. Sử dụng Dao cạo trong ứng dụng bảng điều khiển
- 30. Sử dụng WebBrowser trong ứng dụng bảng điều khiển
Có thể Jon Skeet là người duy nhất có thể làm điều đó :) –
Có vẻ như một bản sao của http://stackoverflow.com/questions/412598/how-to-interact-with-an-application-programmatically. Tôi thấy rằng bằng cách tìm kiếm http://stackoverflow.com/search?q=Control+another+application –
Tuy nhiên câu trả lời được chấp nhận cho câu hỏi này khác với câu trả lời được chấp nhận cho bản sao (cả hai đều cung cấp giải pháp hợp lý). –