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