Программное получение данных о содержимом файлов (скопированных в локальный буфер обмена) в сеансе удаленного рабочего стола

Вот что мне нужно сделать:

  1. Пользователь открывает сеанс удаленного рабочего стола (веб-доступ к удаленным рабочим столам / удаленные приложения)
  2. Пользователь копирует файлы из проводника (CTRL + C) на локальный ПК
  3. Пользователь нажимает кнопку в нашем приложении (запущенном в сеансе RD), и файлы копируются (вставляются) в известный каталог на сервере.

Операция копирования / вставки работает безупречно, когда выполняется вручную в удаленном проводнике файлов, но при программном доступе к содержимому буфера обмена из удаленного сеанса все, что я могу получить, это список файлов (без локальных путей) через формат «FileGroupDescriptorW».

Я знаю, что это нормально, и прочитал документ MSN «RDP - расширение виртуального канала буфера обмена».

Я думаю, что единственное решение - запросить содержимое файлов с помощью «PDU запроса форматирования содержимого» и «PDU ответа форматирования содержимого» из виртуального канала буфера обмена.

Проблема в том, что я не знаю, как реализовать это в Delphi (или на любом другом языке, поскольку мне не удалось найти образец кода для этого в Интернете)

Итак, как я могу программно получить доступ к виртуальному каналу буфера обмена из сеанса удаленных рабочих столов и передать содержимое файлов в потоковом режиме? Мы будем очень благодарны за образцы кода (даже больше, если они есть в Pascal / Delphi)

Спасибо !


person Vincent    schedule 11.09.2014    source источник
comment
Лично я думаю, что вам лучше оставить этот язык нейтральным и сделать его чисто winapi-вопросом, тем самым привлекая более широкую аудиторию.   -  person David Heffernan    schedule 11.09.2014
comment
Я изменил теги, чтобы последовать твоему совету. Спасибо.   -  person Vincent    schedule 11.09.2014


Ответы (1)


Я столкнулся (и решил) эту проблему с помощью небольшого скрипта vb.

Этот сценарий может быть сгенерирован и запущен вашим приложением Delphi.

My_Destination \ Folder - это папка назначения, Folder - это имя открывающихся окон назначения, а Копирование ... - это имя процесса. -bar окна, отображаемые при копировании файлов.

Set objshell = Wscript.CreateObject("WScript.Shell")

objshell.Run "cmd.exe /C start " & "My_Destination\Folder"


success = objshell.AppActivate("My_Destination\Folder")
WScript.Sleep 500

objshell.Sendkeys "%HV"

Set oShell = CreateObject("WScript.Shell") 
WScript.Sleep 3000
Do 
   If (oShell.AppActivate("Copying...") = False) Then
      If oShell.AppActivate("Folder") Then
         WScript.Sleep 500
         oShell.SendKeys "%{F4}"
      End If
      WScript.Sleep 3000
      Exit Do
   Else
      WScript.Sleep 3000
   End If
Loop

Первые строки открывают окно проводника целевой папки. После активации окон вы можете отправлять нажатия клавиш, имитирующие операцию вставки (Вставить:% HV).

Последняя часть ожидает завершения операции копирования и затем закрывает открытые окна.

Примечание. Копирование ... названия окна и последовательности нажатия клавиш (% HV) зависят от языка.

person Cisco    schedule 21.06.2017