Как симулируется нажатие клавиш в инструментах RPA, таких как Automation Anywhere

Мне любопытно узнать, как лучшие инструменты RPA, такие как AA и UiPath, симулируют нажатия клавиш в приложениях. Я создал приложение с использованием Keybd_event для имитации нажатий клавиш, но я все еще сталкиваюсь с проблемой параметра кода сканирования для keybd_event - так как это требуется для выполнения нажатия клавиш в среде Citrix.

private void PressKeyVK(int eKeys, bool bHoldKeydown, bool bRelease)
    {
        int lScan, lExtended;

        lScan = MapVirtualKey(eKeys, 1);
        lExtended = 0;
        if (lScan == 0)
            lExtended = (int)KeyBoardEventEnums.KEYEVENTF_EXTENDEDKEY;
        lScan = MapVirtualKey(eKeys, 0);

        if (!bRelease)
            keybd_event((byte)eKeys, (byte)lScan, (uint)lExtended, UIntPtr.Zero);
        if (!bHoldKeydown)
            keybd_event((byte)eKeys, (byte)lScan, (uint)KeyBoardEventEnums.KEYEVENTF_KEYUP | (uint)lExtended, UIntPtr.Zero);
    }

где, как показано ниже, код хорошо работает в среде Citrix, но имеет проблемы с локальными приложениями.

lScan = MapVirtualKey(eKeys, 1); //flag 1: returns virtual key code of scan code eKeys.

Если используется флаг 2, он хорошо работает в локальных приложениях, но клавиши SHIFT, ESC и Function не работают в приложениях Citrix.

Пожалуйста, предложите, как этот флаг можно использовать, чтобы этот код работал как в Citrix, так и в локальных приложениях.

Ссылки на API:

MapVirtualKey MSDN

Keybd_event MSDN

1 ответ

RPA Tools использует разные технологии для разных уровней применения. Для локальных машин в основном SendMessage() а также PostMessage() API-интерфейсы. Для тонкослойных приложений, таких как RDP и Citrix, он имитирует нажатие клавиш программного обеспечения подобно Application.Sendkeys(),

Другие вопросы по тегам