Откройте приложение и затем нажмите кнопку в этом приложении программно - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы открыть приложение, а затем нажать кнопку в этом приложении, например, я открываю Microsoft Paint и пытаюсь нажать кнопку «Заполнить цветом», в которой есть изображение корзины.

enter image description here

Я только поставил стартовый код процесса и не знаю с чего начать

public partial class Form1 : Form
{
    public Process P;
    public IntPtr WindowHandle;
    public Image TargetButton;

    public Form1()
    {
        InitializeComponent();

        Init();
    }

    private void Init()
    {
        TargetButton = Bitmap.FromFile("Bucket.JPG");

        P = Process.Start("C:\\Windows\\System32\\mspaint.exe");
        WindowHandle = P.MainWindowHandle;

        // now to find that button and click it, I have the button stored as image in TargetButton variable above
    }
}

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете использовать API автоматизации пользовательского интерфейса .

В следующем примере я предположил, что есть открытый экземпляр mspaint, а затем я нашел кнопку Fill with color и нажал на нее.В результате вы увидите, что будет выбрана кнопка панели инструментов.

Для этого добавьте ссылку на сборки UIAutomationClient и UIAutomationTypes и добавьте using System.Windows.Automation; Затем используйте следующий код:

var paint = System.Diagnostics.Process.GetProcessesByName("mspaint")
                    .FirstOrDefault();
if (paint != null)
{
    var paintMainWindow = paint.MainWindowHandle;
    var root = AutomationElement.FromHandle(paintMainWindow);
    var fillButton = root.FindAll(TreeScope.Subtree, Condition.TrueCondition)
        .Cast<AutomationElement>()
        .Where(x => x.Current.Name == "Fill with color").FirstOrDefault();
    if (fillButton != null)
    {
        var invokePattern = fillButton.GetCurrentPattern(InvokePattern.Pattern);
        if (invokePattern != null)
            ((InvokePattern)invokePattern).Invoke();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...