Использование VBA для открытия файла на удаленном рабочем столе - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь автоматизировать процесс, который включает в себя использование 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
  1. Введите RE на рабочем столе, чтобы выделить Корзину
  2. Нажмите Enter, чтобы открыть корзину (чтобы открыть окно проводника)
  3. Подождите одну секунду
  4. Нажмите F4, чтобы переместить курсор в адресную строку
  5. Подождите одну секунду
  6. Удалите "Корзину" из адресной строки, введите вправильный путь к файлу и нажмите Enter

Очевидно, что это крайне ненадежно, и поэтому я ищу что-то лучшее.

Этот код я использую для работы иЯ хочу поделиться с коллегами - из-за этого я не могу загрузить какие-либо программы для использования вместо VBA.

Я смотрел на эти вопросы без особой пользы:

Скрипт для открытия командного файла на удаленном компьютере Я не знаком с WMI и не уверен, что мне придется полностью заменить его с помощью RDP.Я попытался посмотреть на документацию для него, и это довольно над моей головой.

Запуск пакетного файла на удаленном рабочем столе из VBA Это более ранняя ветка от того же пользователя.У него есть неработающие ссылки, по которым я не смог перейти.

Я просмотрел множество тем, у которых был тот же вопрос без ответа, что и у меня.Это может быть бесполезным усилием, но я хотел бы знать окончательно, выполнимо ли это или нет.[РЕДАКТИРОВАТЬ: Некоторые из оставшихся без ответа сообщений на форуме, которые я нашел в моем исследовании ниже]

Заранее благодарим за всю вашу помощь.

1 Ответ

0 голосов
/ 30 ноября 2018

Поможет ли вам и непрограммный подход?

На удаленном компьютере создайте запланированное задание, которое запускается при подключении пользователя к сеансу пользователя.

enter image description here

... и просто запустите что-нибудь оттуда.

Конечно, возможно, вы все еще хотите использовать только передовые методы, но иногда их можно легко избежать только с помощьюсуществующие инструменты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...