gpt4 book ai didi

winapi - 在远程桌面 session 中以编程方式获取文件内容数据(复制到本地剪贴板)

转载 作者:行者123 更新时间:2023-12-04 04:07:15 25 4
gpt4 key购买 nike

这是我需要做的:

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

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

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

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

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

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

    谢谢 !

    最佳答案

    我用一个小的 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) 取决于语言。

    关于winapi - 在远程桌面 session 中以编程方式获取文件内容数据(复制到本地剪贴板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782024/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com