AxMSTSCLib 如何将摄像头从客户端重定向到远程会话?

AxMSTSCLib how to redirect camera from client to remote session?

我正在使用 AxMSTSCLib 开发一个 Windows 应用程序来建立 RDP 连接。但我不知道如何将物理摄像头从客户端重定向到远程 RDP 会话。

我尝试在 .rdp 文件中添加 camerastoredirect:s:*devicestoredirect:s:* 来重定向摄像头,成功了,我可以通过 RDP 在远程桌面中使用摄像头。

但我在 AxMSTSCLib 库中找不到正确的 属性 来启用此功能。

我尝试重定向所有 possible/dynamic 设备,但根本不起作用。这是代码:

public AxMSTSCLib.AxMsRdpClient7NotSafeForScripting oRemote;
oRemote = new AxMSTSCLib.AxMsRdpClient7NotSafeForScripting();

oRemote.AdvancedSettings7.RedirectDevices = true;
oRemote.AdvancedSettings7.RedirectPorts = true;
oRemote.AdvancedSettings7.RedirectPOSDevices = true;

MSTSCLib.IMsRdpClientNonScriptable5 ocx = (MSTSCLib.IMsRdpClientNonScriptable5)oRemote.GetOcx();
ocx.RedirectDynamicDevices = true;
for (int i = 0; i < ocx.DeviceCollection.DeviceCount; i++)
{
    MSTSCLib.IMsRdpDevice device = ocx.DeviceCollection.get_DeviceByIndex((uint)i);
    device.RedirectionState = true;
}

我在较新的 API 文档中找到 IMsRdpCameraRedirConfigCollection,需要将 IMsRdpClientNonScriptable 从 5 升级到 7。

我尝试在将 Redirected 设置为 true 之前打印它的计数,如下所示:

MSTSCLib.IMsRdpClientNonScriptable7 ocx = (MSTSCLib.IMsRdpClientNonScriptable7)oRemote.GetOcx();
Logger.Log("[ocx.CameraRedirConfigCollection.Count]:" + (ocx.CameraRedirConfigCollection.Count).ToString());
for (int i = 0; i < ocx.CameraRedirConfigCollection.Count; i++)
{
    MSTSCLib.IMsRdpCameraRedirConfig camera = ocx.CameraRedirConfigCollection.get_ByIndex((uint)i);
    Logger.Log("[camera.FriendlyName]:" + camera.FriendlyName);
    camera.Redirected = true;
}

不幸的是,我得到了零分。

根据 Docs,看来我必须使用 AddConfig 方法将相机符号 link 添加到集合中。我卡在了这一点上,如何将相机符号 link 添加到 IMsRdpCameraRedirConfigCollection?如何获得相机符号 link?

为什么IMsRdpCameraRedirConfigCollection一开始是空的?由于您没有 Rescan 连接相机设备。

MSTSCLib.IMsRdpClientNonScriptable7 ocx = (MSTSCLib.IMsRdpClientNonScriptable7)oRemote.GetOcx();
// enumerates connected camera devices
ocx.CameraRedirConfigCollection.Rescan();
for (int i = 0; i < ocx.CameraRedirConfigCollection.Count; i++)
{
    MSTSCLib.IMsRdpCameraRedirConfig camera = ocx.CameraRedirConfigCollection.get_ByIndex((uint)i);
    camera.Redirected = true;
}

就是这样,所有连接的相机设备都将被重定向到远程桌面。