Мне нужно управлять другим приложением, моделируя движение мыши и ввод с клавиатуры. Как это сделать на C#? Возможно ли это?Управление другим приложением с использованием C#
ответ
Вы смотрели на
White
TestStack?
Пример кода:
Application application = Application.Launch("foo.exe");
Window window = application.GetWindow("bar", InitializeOption.NoCache);
Button button = window.Get<Button>("save");
button.Click();
Я не думаю, что может быть лучше, чем это. Библиотека создана ThoughtWorks.
- то, что плохое звено или кодплекс просто бросил концепцию? –
Я пытался просмотреть документацию Белого проекта, и он начал давать ошибки! BTW, «Белый» даст вам подход OO для управления приложениями на базе Windows. – SolutionYogi
Белый кажется хорошим маршрутом. Я займусь этим. – Salamander2007
См "Для того, чтобы отправить нажатие клавиши в другое приложение" на этой странице:
Использовать собственный Win32 API SendMessage. DllImport этот метод из User32.dll. Вы можете использовать этот API для отправки как клавиатуры & мыши сообщений
Вы можете использовать P/Invoke, я украл следующий код для щелчков мыши в случайных точках на кнопке с известной ручкой:
[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);
вам может использовать AutoIT, это бесплатная программа, и у нее есть версия dll, которую вы можете импортировать в C# (DllImport). Он позволяет вам нажимать на элементы управления, записывать строки для редактирования полей, делать выборки combobox и т. Д. В другом приложении с C#.
Я попытался сделать то же самое: использовать мышь, я использовал этот класс
(вам нужно добавить 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);
}
}
и после того, как на ваших Form1 (предполагающее зовут form1) вы может
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();
}}
Чтобы иметь координаты на указатель, я использую таймер и этикетку:
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
}
прекрасно работают со мной.
- 1. Управление событиями, запущенными другим приложением
- 2. Перечисление Windows/Управление другим приложением из .Net
- 3. управление приложением с помощью кода C++
- 4. Взаимодействие с другим приложением
- 5. Управление приложением с использованием другого приложения
- 6. Управление внешним приложением через C#
- 7. Включить управление другим приложением с помощью User32 (vb .net)
- 8. Взаимодействие с другим приложением
- 9. VB.NET Поделитесь панелью с другим приложением
- 10. Управление серверным приложением
- 11. Удаленное управление графическим приложением
- 12. Приложение C# для управления другим приложением
- 13. Поделиться uri с другим приложением
- 14. Android: Взаимодействие с другим приложением?
- 15. Управление приложением с общей библиотекой
- 16. Управление приложением Yii с Git
- 17. с использованием файла cookie/сеанса, созданного другим приложением?
- 18. Получить .apk другим приложением
- 19. Управление бит-упакованными данными с использованием C#
- 20. Камера используется другим приложением
- 21. Управление приложением из службы
- 22. Управление большим OSGi-приложением
- 23. Управление многоязычным приложением
- 24. удаленное управление консольным приложением java с использованием cmd
- 25. Управление приложением SilverLight с использованием селена не работает
- 26. Управление приложением нескольких фреймов
- 27. Управление iPad с другим устройством iOS
- 28. Общение с другим терминальным приложением через SSH
- 29. Связь с Android-сервисом с другим приложением
- 30. экранное манипулирование другим приложением android
Возможно, Джон Скит - единственный, кто может это сделать :) –
Похож на дубликат http://stackoverflow.com/questions/412598/how-to-interact-with-an-application-programmatically. Я обнаружил, что при поиске http://stackoverflow.com/search?q=Control+another+application –
Однако принятый ответ на этот вопрос отличается от принятого ответа для дубликата (оба обеспечивают разумное решение). –