Я пытаюсь автоматизировать процесс, который включает в себя использование VBA в Excel для открытия файла на удаленном рабочем столе через 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
- Введите RE на рабочем столе, чтобы выделить Корзину
- Нажмите Enter, чтобы открыть корзину (чтобы открыть окно проводника)
- Подождите одну секунду
- Нажмите F4, чтобы переместить курсор в адресную строку
- Подождите одну секунду
- Удалите "Корзину" из адресной строки, введите вправильный путь к файлу и нажмите Enter
Очевидно, что это крайне ненадежно, и поэтому я ищу что-то лучшее.
Этот код я использую для работы иЯ хочу поделиться с коллегами - из-за этого я не могу загрузить какие-либо программы для использования вместо VBA.
Я смотрел на эти вопросы без особой пользы:
Скрипт для открытия командного файла на удаленном компьютере Я не знаком с WMI и не уверен, что мне придется полностью заменить его с помощью RDP.Я попытался посмотреть на документацию для него, и это довольно над моей головой.
Запуск пакетного файла на удаленном рабочем столе из VBA Это более ранняя ветка от того же пользователя.У него есть неработающие ссылки, по которым я не смог перейти.
Я просмотрел множество тем, у которых был тот же вопрос без ответа, что и у меня.Это может быть бесполезным усилием, но я хотел бы знать окончательно, выполнимо ли это или нет.[РЕДАКТИРОВАТЬ: Некоторые из оставшихся без ответа сообщений на форуме, которые я нашел в моем исследовании ниже]
Заранее благодарим за всю вашу помощь.