You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程最小化机器下VBS调用SendKeys执行SAP Shift+Enter失效求助

解决SAP Logon窗口远程最小化时Shift+Enter模拟失效问题

你的问题核心在于SendKeysShell是全局按键模拟,高度依赖前台活动窗口和桌面会话状态——当远程桌面最小化时,系统会暂停该会话的GUI渲染优化,导致按键无法被目标控件正确识别。另外,代码里重复调用Activate也可能导致焦点不稳定,进一步加剧问题。下面给你几个可靠的解决方案:

方案1:改用控件原生的SendKeys方法(优先推荐)

放弃全局的SendKeysShell,直接在选中的WinListView控件上调用SendKeys方法。UFT会自动确保控件获得焦点后再发送按键,可靠性比全局模拟高得多:

If Dialog("SAP Logon 730").WinListView("SysListView32").Exist(100) Then
    Dim sapLogonDialog : Set sapLogonDialog = Dialog("SAP Logon 730")
    sapLogonDialog.Activate
    sapLogonDialog.WinListView("SysListView32").Select sServer
    ' 直接在目标控件上发送Shift+Enter
    sapLogonDialog.WinListView("SysListView32").SendKeys "+{ENTER}"
End if

方案2:禁用远程桌面的最小化优化

如果必须保持远程桌面最小化运行测试,需要修改远程桌面连接的设置,让会话在最小化时仍保持GUI活动:

  • 打开远程桌面连接客户端,点击显示选项
  • 切换到显示标签页,取消勾选「当远程桌面连接最小化时,停止远程桌面」(不同版本翻译略有差异,英文为 Stop the remote desktop when minimized)
  • 保存设置后重新连接,这样即使远程窗口最小化,会话的GUI交互也能正常响应模拟按键

方案3:使用Windows API发送按键(进阶)

如果上述方案都不适用,可以通过调用Windows API的SendMessage直接给目标控件发送按键消息,完全不依赖前台焦点:

  1. 先在UFT中声明API函数:
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const VK_SHIFT = &H10
Const VK_RETURN = &HD
  1. 修改代码,获取控件句柄后发送Shift+Enter的完整按键序列:
If Dialog("SAP Logon 730").WinListView("SysListView32").Exist(100) Then
    Dim sapLogonDialog : Set sapLogonDialog = Dialog("SAP Logon 730")
    Dim listViewHandle : listViewHandle = sapLogonDialog.WinListView("SysListView32").GetROProperty("hwnd")
    
    sapLogonDialog.Activate
    sapLogonDialog.WinListView("SysListView32").Select sServer
    
    ' 模拟Shift按下→Enter按下→Enter抬起→Shift抬起的完整流程
    SendMessage listViewHandle, WM_KEYDOWN, VK_SHIFT, 0
    SendMessage listViewHandle, WM_KEYDOWN, VK_RETURN, 0
    SendMessage listViewHandle, WM_KEYUP, VK_RETURN, 0
    SendMessage listViewHandle, WM_KEYUP, VK_SHIFT, 0
End if

关键提示

  • 永远优先使用UFT针对特定控件提供的原生方法,而非全局模拟按键——后者稳定性极差,容易受窗口状态、焦点突变等因素影响
  • 远程桌面环境下的GUI自动化测试稳定性本身会打折扣,尽量保持会话处于活动状态(不要最小化),或者调整远程桌面的资源优化设置

内容的提问来源于stack exchange,提问作者Ivan Garrido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:24