【问题标题】:Programmatically obtaining files content data (copied in local clipboard) in remote desktop session在远程桌面会话中以编程方式获取文件内容数据(复制到本地剪贴板)
【发布时间】:2014-09-11 07:52:49
【问题描述】:

这是我需要做的:

  1. 用户打开远程桌面会话(RD Web 访问/远程应用程序)
  2. 用户从本地 PC 上的资源管理器 (CTRL+C) 复制文件
  3. 用户单击我们应用程序中的按钮(在 RD 会话中运行),文件被复制(粘贴)到服务器上的已知目录

复制/粘贴操作在远程文件资源管理器中手动完成时完美无缺,但是当以编程方式从远程会话访问剪贴板内容时,我只能通过“FileGroupDescriptorW”格式获得文件列表(没有本地路径)。

我知道这是正常现象,并已阅读 MSN“RDP - 剪贴板虚拟频道扩展”文档。

我认为唯一的解决方案是使用剪贴板虚拟通道中的“格式化内容请求 PDU”和“格式化内容响应 PDU”请求文件内容。

问题是我不知道如何在 Delphi(或任何其他语言,因为我无法在网络上找到任何代码示例)实现这一点

那么如何以编程方式从 RD 会话访问剪贴板虚拟通道并流式传输文件内容?代码示例将不胜感激(如果在 Pascal/Delphi 中有更多示例)

谢谢!

【问题讨论】:

  • 就我个人而言,我认为您最好保持这种语言中立,并使其成为纯粹的 winapi 问题,从而吸引更广泛的受众
  • 我已更改标签以遵循您的建议。谢谢。

标签: winapi clipboard rdp


【解决方案1】:

我用一个小的 vb 脚本遇到(并解决了)这个问题。

此脚本可由您的 Delphi 应用程序生成和启动。

My_Destination\Folder 是目标文件夹,Folder 是打开的目标窗口的名称,Copying... 是名称复制文件时显示的进度条窗口。

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) 取决于语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-01
    • 2010-11-05
    • 2012-01-06
    • 2010-11-12
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多