我正在尝试自动化一个过程,其中包括使用Excel中的VBA通过RDP在远程桌面上打开一个文件。我已经成功地登录到RDP,但是现在我很难始终打开这个文件。我编写了一些依赖于SendKeys的代码,这些代码可能在10%的时间内工作,但我正在寻找更健壮的代码。
Sub RunRDP()
Dim RetVal As Variant
Dim Target As String
Dim Sheet As Variant
'Log-in info
Target = "AAAA.com"
UserName = "BBBBBB\CCC"
Pwd = "DDDDD"
'Connect to Remote Desktop
RetVal = Shell("cmdkey /generic:""" & Target & """ /user:""" & UserName & """ /pass:""" & Pwd & """", 3)
RetVal = Shell("c:\Windows\System32\mstsc.exe /v:" & Target, 3)
'Press yes through cert errors
Do
If InStr(ActiveWinTitle, "Remote Desktop Connection") > 0 Then
Application.SendKeys "y", True
End If
Loop Until InStr(ActiveWinTitle, "AAAA") > 0
Application.Wait (Now + TimeValue("00:00:03"))
If InStr(ActiveWinTitle, "Remote Desktop Connection") > 0 Then
AppActivate "AAAAA.com - Remote Desktop Connection"
Else
AppActivate "AAAAA.com"
End If
Application.Wait (Now + TimeValue("00:00:07"))上述代码按预期工作。ActiveWinTitle是一个获取当前窗口标题的函数,请参见下面的内容:
Public Declare Function GetForegroundWindow Lib "user32" _
() As Long
Public Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (ByVal HWnd As Long, _
ByVal lpString As String, ByVal cch As Long) As Long
Public Function ActiveWinTitle() As String
Dim WinText As String
Dim HWnd As Long
Dim L As Long
HWnd = GetForegroundWindow()
WinText = String(255, vbNullChar)
L = GetWindowText(HWnd, WinText, 255)
ActiveWinTitle = Left(WinText, InStr(1, WinText, vbNullChar) - 1)
End Function下面的代码是我试图为打开文件所做的工作。其英文解释如下:
Application.SendKeys "RE", True
Application.SendKeys "~", True
Application.Wait (Now + TimeValue("00:00:01"))
Application.SendKeys "{F4}", True
Application.Wait (Now + TimeValue("00:00:01"))
Application.SendKeys "{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}{BS}F:\[**FILEPATH HERE**]~", True显然,这是非常不可靠的,这也是我正在寻找更好的东西的原因。
这段代码是我工作时使用的,我想和我的同事分享--因为这一点,我无法下载任何程序来代替VBA来使用。
我看过这些问题,但毫无结果:
Script to Open a batch file on a remote computer我不熟悉WMI,也不确定是否必须完全使用RDP替换。我试着看了它的文档,它完全超出了我的想象。
Run a batch file on a remote desktop from VBA --这是来自同一个用户的早期线程。它有一些我无法理解的死胡同。
我看过很多和我的一样没有答案的线程。这可能是徒劳的努力,但我想确切地知道这是否是可管理的。编辑:我在下面的研究中发现的一些未回答的论坛帖子
提前感谢你的帮助。
发布于 2018-11-30 17:48:31
非编程方法对你也有帮助吗?
在远程计算机上,创建一个计划好的任务,当有人连接到用户会话时启动该任务。

...and只是在那里运行任何东西。
当然,您可能仍然希望只使用先进的技术,但有时只能通过使用现有的工具才能轻松地避免这些技术。
https://stackoverflow.com/questions/53562268
复制相似问题