我很想知道 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
RPA 工具针对不同的应用层使用不同的技术。对于本地机器,主要通过 SendMessage()
和 PostMessage()
API。对于 RDP 和 Citrix 等薄层应用程序,它模拟类似于 Application.Sendkeys()
的软件按键。
我是一名优秀的程序员,十分优秀!