如何在自动化任务中的RPA工具中模拟击键

时间:2018-06-19 10:30:31

标签: c# sendkeys citrix scancodes automationanywhere

我很想知道像AA和UiPath这样的顶级RPA工具如何模拟应用程序的击键。 我已经构建了一个使用Keybd_event来模拟击键的应用程序,但我仍然面临 keybd_event 的扫描代码参数问题 - 因为它需要在 Citrix环境中执行击键。

{'statement_timeout': '3600s'}

以下代码在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);
    }

如果使用标志2,它在本地应用程序中运行良好,但SHIFT,ESC和功能键不能用于Citrix应用程序。

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

API参考:

MapVirtualKey MSDN

Keybd_event MSDN

1 个答案:

答案 0 :(得分:1)

RPA工具针对不同的应用程序层使用不同的技术。对于主要通过SendMessage()PostMessage() API的本地计算机。对于RDP和Citrix等薄层应用程序,它模拟类似于Application.Sendkeys()的软件按键。