Java Мост доступа c# невозможно активировать поле, задать текст, нажать и т. Д. - PullRequest
0 голосов
/ 23 января 2020

Я работаю над мостом доступа Java в c# уже некоторое время. Я наконец начал работать, частично.

  • Я могу правильно инициализировать мост доступа.
  • Я могу использовать GetAccessibleContextFromHWND, чтобы получить vmid и javaObjectHandle.
  • I также можно использовать GetAccessibleContextInfo, чтобы получить availableContextInfo.
  • Наконец, я могу перечислить дочерние элементы и найти интересующий меня узел.

Как мне взять его оттуда? Я пытался сделать такие вещи, как установить текст, щелкнуть или получить текст, но не смог. Я использовал приведенный ниже код, который был упомянут в другом вопросе, Автоматизация с использованием Java Мост доступа

Установить текст:

public string Text
{
    get 
    {
        return GetText();
    }
    set
    {
        if (!API.setTextContents(this.VmId, this.Context, value))
            throw new AccessibilityException("Error setting text");
    }
}

private string GetText()
{
    System.Text.StringBuilder sbText = new System.Text.StringBuilder();

    int caretIndex = 0;

    while (true)
    {
        API.AccessibleTextItemsInfo ti = new API.AccessibleTextItemsInfo();
        if (!API.getAccessibleTextItems(this.VmId, this.Context, ref ti, caretIndex))
            throw new AccessibilityException("Error getting accessible text item information");

        if (!string.IsNullOrEmpty(ti.sentence))
            sbText.Append(ti.sentence);
        else               
            break;

        caretIndex = sbText.Length;

    }

Нажмите на кнопку:

public void Press()
{
    DoAction("click");
}

protected void DoAction(params string[] actions)
{
    API.AccessibleActionsToDo todo = new API.AccessibleActionsToDo()
    {
        actionInfo = new API.AccessibleActionInfo[API.MAX_ACTIONS_TO_DO],
        actionsCount = actions.Length,
    };

    for (int i = 0, n = Math.Min(actions.Length, API.MAX_ACTIONS_TO_DO); i < n; i++)
        todo.actionInfo[i].name = actions[i];

    Int32 failure = 0;
    if (!API.doAccessibleActions(this.VmId, this.Context, ref todo, ref failure))
        throw new AccessibilityException("Error performing action");
}

Любые идеи будут высоко оценены. Спасибо !!

1 Ответ

0 голосов
/ 18 февраля 2020

doAccessibleActions на самом деле эта функция вообще не работает, поэтому вы должны объединить win32 api для создания альтернативы, например: set text => send key, scroll ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...