2

我很想知道像 AA 和 UiPath 这样的顶级 RPA 工具如何模拟应用程序的击键。我已经使用 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 和功能键在 citrix 应用程序中不起作用。

请建议如何使用该标志使此代码在 citrix 和本地应用程序中工作。

API 参考:

MapVirtualKey MSDN

Keybd_event MSDN

4

1 回答 1

1

RPA 工具针对不同的应用层使用不同的技术。对于本地机器,主要由SendMessage()APIPostMessage()提供。对于 RDP 和 Citrix 等薄层应用程序,它模拟类似于Application.Sendkeys().

于 2018-06-20T15:38:58.303 回答