从Excel连接到RDP

时间:2018-01-31 12:51:42

标签: excel excel-vba rdp vba

我看到很多论坛都在谈论从Excel文件启动远程桌面连接。

我也看到了这段代码,这很好并且有效。

Sub OpenRDP()
Dim MyRDP As Variant

MyLink = "c:\windows\system32\mstsc.exe /v:" & ActiveCell.Value

MyRDP = Shell(MyLink, 1)

End Sub

但是,在我的Excel文件中,在一列中我有HOST地址,旁边是一个包含密码的列。

我的问题是:是否可以启动RDP并将其传递给主机IP地址和密码?如果是,它是如何完成的?

谢谢!

1 个答案:

答案 0 :(得分:2)

由于您只是通过shell调用命令,因此您不能真正处理以编程方式启动的应用程序(在本例中为RDP)。所以你不能这样做:

MyRDP.Password = Range("B2").value

但是,您可以使用Application.Sendkeys向Windows发送按键,它会盲目地应用于发送命令时光标所在的位置。

假设您的密码存储在同一行,但是在列上(相邻的单元格):

Application.SendKeys (ActiveCell.Offset(, 1).Value & "{ENTER}")

发送密码并输入"输入"按键接受密码。

因为RDP需要花一点时间才能弹出,所以在调用shell命令之后你不能只是扔掉那行。你必须等待一段时间。 5秒在我的compyter上工作得很好,但你的电脑可能会更慢或更快,所以你可能不得不在这里闲逛:

Sub OpenRDP()
    Dim MyRDP As Variant
    Dim MyLink As String

    MyLink = "c:\windows\system32\mstsc.exe /v:" & ActiveCell.Value

    MyRDP = Shell(MyLink, 1)

    'wait five seconds and send password in adjacent cell of same row
    Application.Wait (Now() + TimeValue("0:00:5"))
    Application.SendKeys (ActiveCell.Offset(, 1).Value & "{ENTER}")

End Sub

我毫不怀疑,通过查询WMI运行进程并等待RDP弹出来执行sendkeys,或者搜索库以帮助使用代码与RDP交互,我可以毫不犹豫地将其复杂化10000倍,但......对于两行代码,这种方法可以让你走得很远。

另外,(因为它值得一说),将您的密码存储在Excel中并不十分安全。获得对工作簿的访问权限的任何人都可以访问您的远程桌面。即使工作簿受密码保护,只需按一下按钮就可以破解它。