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

Ето какво трябва да направя:

  1. Потребителят отваря сесия на отдалечен работен плот (RD Web Access/Remote apps)
  2. Потребителят копира файлове от Explorer (CTRL+C) на локален компютър
  3. Потребителят кликва върху бутон в нашето приложение (работещо в RD сесията) и файловете се копират (поставят) в известна директория на сървъра

Операцията за копиране/поставяне работи безупречно, когато се извършва ръчно в отдалечен файлов изследовател, но при програмен достъп до съдържанието на клипборда от отдалечената сесия всичко, което мога да получа, е списъкът с файлове (без локални пътища) чрез формата „FileGroupDescriptorW“.

Наясно съм, че това е нормално и прочетох MSN „RDP – Clipboard Virtual Channel Extension“ Doc.

Мисля, че единственото решение би било да поискате съдържанието на файловете с помощта на „Format Contents Request PDU“ и „Format Contents Response PDU“ от виртуалния канал на клипборда.

Проблемът е, че нямам идея как да внедря това в Delphi (или на друг език, тъй като не успях да намеря примерен код за това в мрежата)

И така, как мога програмно да получа достъп до виртуалния канал на клипборда от RD сесията и да предавам поточно съдържанието на файловете? Примери за код ще бъдат много оценени (дори повече, ако има в 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

Първите редове отварят прозорец на Explorer на целевата папка. След като прозорците се активират, можете да изпращате натискания на клавиши, емулиращи операция за поставяне (Поставяне: %HV).

Последната част изчаква прекратяването на операцията по копиране и след това затваря отворените прозорци.

Забележка: Копиране... името на прозореца и последователностите от натискания на клавиши (%HV) зависят от езика.

person Cisco    schedule 21.06.2017