问题标签 [wpd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
587 浏览

c# - wpd c#在存在多个设备时枚举设备内容

我开发了一个应用程序,它枚举和合并所有连接到系统的驱动器的内容映射。对具有 WPD API Interop.PortableDeviceApiLib.dll 的设备执行相同操作,管理现代设备存在编组限制。

我设法按照https://blogs.msdn.microsoft.com/dimeby8/2006/12/05/enumerating-wpd-devices-in-c/
中引用的技巧 来拆卸和重新组装 Interop.PortableDeviceApiLib。 dll,以便一次管理多个设备,替换

instance void GetDevices([in][out] string& marshal( lpwstr) pPnPDeviceIDs

instance void GetDevices([in][out] string[] marshal( lpwstr[]) pPnPDeviceIDs

但是,对于两个连接的设备,返回数组的第二项总是 null !!!

这是代码片段:

请注意,有两个已经连接的设备(在每个设备上我都回复了 Allow connection: YES),因此 var count 接收到值 2 并且 deviceIds[0] 是可以的,但是 deviceIds[1] 始终为 null !(即使在交换 USB 插槽上的设备之后)。

我在 Windows 10 上使用 Windows Studio Professional 2017 这两个设备分别是 Honor9 和 U 盘或 iPad。在我插入的 project.csproj 文件中: ...

...而不是引用 COM 文件:

因为以前它给了我两个问题:1)每次编译都会覆盖新的 bin/Debug/Interop.PortableDeviceApiLib.dll;2)它给了我一个例外:Impossible to find void PortableDeviceApiLib.IPortableDeviceManager.GetDevices(System.String ByRef, UInt32 ByRef)

有没有人可以解决总是为非第一设备返回的空值?

0 投票
1 回答
589 浏览

c# - 如何通过 c# windows 应用程序在 MTP 设备中创建文件夹?

我正在尝试将文件传输到使用 C# 制作的 Windows 应用程序中的 android MTP 设备。如何在 Windows 应用程序中的 MTP 设备上创建文件夹?

我正在使用WPD API,并且成功地将文件发送到 MTP 设备。

我在 PortableDevices API 中阅读了上述代码。我现在不知道 guid 是什么意思。

我以为api会支持创建文件夹的功能。但是,api 只支持读取、写入和删除文件。

如何在 MTP 设备上创建文件夹?或者,mtp 设备有什么好的 C# api 吗?

0 投票
1 回答
109 浏览

windows - 如何在 Windows 便携设备中获取图片传输协议事件的参数?

我正在尝试使用 WPD 支持数码相机。我有工作请求/数据/响应通信(PTP 类型 1、2、3),但有事件问题(类型 4)。从事件中我需要一个命令代码(例如0xc102)和最多三个整数参数。

我已经使用Microsoft 的 Portable Devices COM API Sample中的代码注册并接收事件,它很容易捕捉到事件的发生 -但我无法获取参数。命令代码不是直接提供的,而是作为(假定是随机的)CLSID 的一部分嵌入的。

我尝试IPortableDeviceValues像解析响应一样使用事件对象,但是在尝试调用GetIPortableDevicePropVariantCollectionValueAPI 时返回HRESULT( ERROR_NOT_FOUND) 0x80070490。此调用用于从响应对象获取参数。

我试过(插入CPortableDeviceEventsCallback::OnEvent的代码):

我也试图从中获取WPD_EVENT_PARAMETER_OBJECT_PARENT_PERSISTENT_UNIQUE_IDWPD_EVENT_PARAMETER_OBJECT_CREATION_COOKIE获取,但它们没有设置。

还有WPD_EVENT_ATTRIBUTE_OPTIONS,WPD_EVENT_ATTRIBUTE_NAMEWPD_EVENT_ATTRIBUTE_PARAMETERS- 但我不知道如何找到它们,里面也没有任何有趣的东西。

或者,也许我所寻求的是IUNKNOWN我在案件中忽略的switch?但它可能是什么类型?

数据在那里,我可以在 Wireshark+USBPcap 和其他 PTP 应用程序中看到它。

0 投票
1 回答
302 浏览

c# - C# 中的 PortableDeviceManagerClass 无法初始化

我有 ac# 库,它提供了一些将数据上传到连接(android)设备的功能。dll 本身通过UnmangedExports导出以供 delphi 应用程序使用。

这是由 delphi 应用程序调用的函数:

这是 PortableDeviceCollection 类:

我可以使用 Visual Studio 创建 dll 并在 delphi 应用程序中使用它。当 delphi 应用程序调用该getDevices()函数时,我在 PortableDeviceCollection 类的实例化时遇到错误:

未找到文件或程序集“Interop.PortableDeviceApiLib,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null”或其依赖项。程序集由比当前加载的运行时更新且无法加载的运行时创建。

ProductXY.PortableDeviceCollection..ctor()
ProductXY.ProductXYMain.getDevices()

c# 项目的目标框架设置为.Net Framework 4. 当我尝试编译项目时,使用任何较低版本都会出错:

无法解析主要引用“Interop.PortableDeviceApiLib”,因为它间接依赖于 .NET Framework 程序集“mscorlib,版本 = 4.0.0.0,文化 = 中性,PublicKeyToken = b77a5c561934e089”,它是更高的版本 4.0.0.0高于当前目标框架中的 2.0.0.0 版本。

请注意。我既没有写过 c# 库也没有写过 delphi 应用程序。两人合作多年。现在我必须向 c# 库添加一个功能。我没有在项目中添加任何代码。我只是尝试再次编译它并使用 dll。我唯一做的就是通过 NuGet Packetmanager 更新 RGiesecke.DLLExport.Metadata。没有更新我得到一个错误

“Microsoft.Build.Utilities.ToolLocationHelper 找不到 ildasm.exe”

我知道这个在 C# 中枚举 Windows 便携式设备的问题。但是在达到问题所涉及的代码之前,我的错误就被抛出了。我仍然尝试了该问题的解决方案,但是答案中描述的操作(在 dll 中解组合、查找和替换)已经完成(否则我的代码将无法编译)。

错误消息对我来说没有意义。Interop.PortableDeviceApiLib是一个 COM-Lib,无法在不同的框架版本中下载。我想我在这里遗漏了一些东西。

谁能帮我?

0 投票
0 回答
147 浏览

c++ - 在 Windows 中禁用便携式设备

我正在尝试使用 setupdixxx API 禁用便携式设备,并且设备被阻止并且设备内容不可见。我希望设备处于禁用状态,并且不应该看到任何内容。但是当我尝试从设备管理器启用它时,它的内容变得可见。

这是我的伪代码。

  1. 枚举便携设备,【设备状态:启用】如果已连接,则禁用。[设备状态:禁用]
  2. 如果检测到手动干预,[设备状态:启用]再次禁用它。[设备状态:禁用][需要重新启动才能更改此状态]

由于系统需要重新启动,最后一次禁用没有正确发生。在这种情况下,它的内容变得可见。

有什么办法可以避免这种情况。我不希望它的内容可见。

或者有没有办法限制用户从设备管理器启用设备?

提前致谢。

0 投票
1 回答
553 浏览

android - WPD/MTP PortableDevices,内容始终为空(Windows、VisualStudio 2012、VB.NET)

问题已通过 NuGet 包 PortableDevices 和此处的解决方案进行测试:Accessing an MTP device in Visual Basic .NET

我想从三星 Android 平板电脑获取文件列表。我可以连接,但 GetContents() 不返回任何文件(root.Files.Count = 0)。提前致谢。

0 投票
1 回答
231 浏览

c# - PortableDeviceApiLib 显示进度 TransferContentToDevice()

我正在使用https://www.nuget.org/packages/PortableDevices/将文件复制到 WPD。

我可以使用TransferContentToDevice(___,___)函数复制文件。

现在,它没有显示任何进度对话框。如何显示传输进度?

我的代码

TransferContentToDevice() 函数 - 来自便携式设备 API

0 投票
0 回答
299 浏览

c# - Windows 便携式设备 (WPD)、C#:如何在便携式设备上创建文件时设置“修改日期”

如果我使用 WindowsExplorer 从 Windows10 将文件复制到我的 moto G6 手机,则新创建的文件立即具有正确的 ModifyDate,就像 Windows 上的原始文件一样。来自 moto 设备上的应用程序的 Java File.setLastModified() 也可以工作。

我测试在我的 TransferContentToDevice() 代码中的 CreateObjectWithPropertiesAndData() 中使用来自 WPD_OBJECT_DATE_MODIFIED 的 PROPERTYKEY 值设置 IPortableDeviceValues,但它不起作用(参见代码示例)。

将文件复制到移动设备时是否可以设置修改日期?还是 WindowsExplorer 使用了不同的机制?如果是,详细说明,我可以从 c#/vb.net 使用它吗?或者 PortableDeviceApiLib 中是否有其他方法可以在创建文件后更改修改日期?有任何想法吗?提前致谢!

0 投票
1 回答
36 浏览

c# - 我在哪里可以获得 PortableDevice.h 或 WPD 定义的常量 guid 等

所以,我正在研究一个项目,处理 Windows 便携式设备。我所经历的一切都是 WPD_[某个名称]、WPD_[某个其他东西] 等。我找到的所有文档页面都引用了这些常量。但在幕后,这些常量直接与一些常量 GUID 值相关联。

有谁知道这些常量如何/在哪里存在?一些文档说要查看 PortableDevices.h,而我在上面查找的所有内容都指向更多命名常量,而不是相应的 GUID。

例如,

另一个展示所有这些“WPD_”引用的好例子的页面可以在微软的页面上找到

0 投票
0 回答
32 浏览

android - 有没有办法通过 adb 和 mtp 在连接的设备之间设置完全匹配?

使用 adb 我得到连接设备的序列号adb devices -l。使用 WPD,我可以连接设备并查看WPD_DEVICE_SERIAL_NUMBER. 在某些智能手机上,使用 adb 和 wpd 收到的序列号不匹配。

作为临时解决方案,可以选择通过 adb 下载文件,然后通过 mtp 检查其可用性。但我想知道是否还有其他关于如何建立合规性而不是通过序列号的选择?