问题标签 [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.
.net - 如何从 Android 设备(响应者)生成自定义 MTP 事件,并在 Windows 中捕获事件(发起者)
我需要做什么:
- 从响应者(运行 Android 的 Beaglebone Black)生成自定义供应商扩展事件,并在发起者中获取事件通知。
我正在使用什么:
- Initiator - Windows 7 上的 C# .Net 应用程序,使用用于portabledeviceapilib.dll(COM 互操作)库的托管包装器。
- 测试响应程序 1 - Microsoft 的 MTP 模拟器 3.0
- 测试响应程序 2 - 运行 Android Jelly Bean 4.1.1 的 Beaglebone Black
到目前为止我所做的工作:
我在发起者和响应者之间进行了成功的端到端通信。我可以发送 MTP 命令并获得 MTP 响应。我还成功地从响应者那里获得了标准事件通知。
问题
我在来自 Android 的 USB 数据包中看不到 MTP 事件代码,即使事件已成功触发并由发起方接收。当我将 Android 中的标准事件代码更改为自定义偶数代码时,我仍然会收到相应的事件消息(详情如下)。
到目前为止我做了什么
在响应端,浏览 Android 源代码时,我发现/frameworks/av/media/mtp/mtp.h中定义了 MTP 事件代码。
以下是为添加/删除对象定义的 eventID。
这些事件代码在 MTP 规范中定义。
为了订阅发起方的事件,我遵循Darene Lewis的文章中的指导方针。我将 GUID 用于此处定义的常量中的事件。
当向设备添加文件或从设备中删除文件时,将触发 MTP 事件通知,并且发起者获取将 eventID 映射到常量之一的通知。据我了解,GUID 的前 4 个字节对应于 eventID。
以下是文件添加和删除事件的 GUID。
我的测试包括从设备中添加/删除文件。
使用模拟器时,发起者成功获得两个事件通知,并且它们映射到如上定义的正确 WPD 事件。此外,我确认这些事件代码显示在 USB 数据包中。
使用 Android 设备时,发起者成功获取了两个事件通知,并且它们映射到如上定义的正确 WPD 事件。但是,我在 USB 数据包的任何地方都看不到事件代码。
我不明白 COM 互操作库如何成功收到事件通知,即使数据包不显示 MTP 事件代码。
由于我看不到数据包中的事件代码,因此无法测试将自定义事件代码从设备发送到发起方。
我做了一个实验,修改了上面为供应商扩展事件代码指定的 Android MTP 事件代码(如 MTP 规范中所述为 0xC000 - 0xC7FF),并更新设备上的 libmtp 以查看会发生什么。
我预计发起者永远不会收到事件,但令人惊讶的是,即使在更改事件代码之后,COM 互操作库仍然接收到事件并将它们映射到正确的 GUID。
总而言之,在使用 Android 时,我在 USB 消息中看不到 MTP 事件代码,尽管发起者以某种方式成功获取了通知。使用 MTP 模拟器时,我确实在 USB 消息中看到了 MTP 事件代码。
android - 如何使用 wpd_Api 将文件复制到设备中的文件夹位置
我想使用 WPD-Api 将文件从我的电脑复制到我的 android 设备。
我可以复制到根文件夹,但我无法复制到根目录中的文件夹。
我试图枚举设备中的内容,但这也不起作用。我尝试使用链接,但没有用。我也在分享我的代码片段
c++ - 如何使用 Windows Portable Devices C++ API 获取 MTP 设备公开的文件夹中所有文件(对象)的列表?
可以枚举 MTP 设备文件系统中的所有文件,然后获取系统中每个文件/文件夹的对象 ID。
我的问题是:
- 有没有办法判断一个对象是文件还是文件夹?
- 找到文件夹后,如何获取其中所有文件(对象)的列表?
我在 msdn 网站上查看了 Programmer's reference page,但没有找到任何相关内容。我错过了什么吗?
谢谢!
winapi - 为什么我没有得到 mtp 设备上对象的 WPD_OBJECT_ORIGINAL_FILE_NAME(即文件名)
我在 Windows 服务中使用 WPD(Windows 便携式设备)API,将文件从 mtp 设备上的文件夹传输到硬盘上的指定文件夹。
出于测试目的,我在 mtp 设备上的文件夹下创建 xyzdata.txt 文件。因此,当代码达到它执行此操作的点时:
'hr' 填充有“ERROR_BUSY”,并且根本没有设置 originalFileName。是否有可能没有为某些对象设置 WPD_OBJECT_ORIGINAL_FILE_NAME 的原因,或者它是检索数据的问题?
任何帮助都将是无价的。如果您需要更多代码,我将在此处发布。
编辑:
错误代码是,
hr = HRESULT_FROM_WIN32(ERROR_BUSY) : 请求的资源正在使用中。
此外,该设备是安卓设备。有时当我们将 USB 电缆插回时,文件名可用。但这种情况很少见。请让我知道发生了什么
c# - WPD C# Windows 手机
我是 Windows Phone 开发的新手,我正在尝试将文件从 PC 复制到 Windows Phone Documents 文件夹。我阅读并尝试了这篇文章中的内容Copy files with WPD to Windows Phone C#。原文是https://dzone.com/articles/creating-apis-for-mobile-iot-apps。不幸的是,我在该行中遇到了 ArgumentException 错误:
我认为它与参数ParentObjectID有关,当我调用该方法时:
我尝试将“G:\Documents”替换为“Windows Phone:\Documents”、“Phone:\Documents”和“Windows Phone:\Phone\Documents”,但没有成功。
那么,如何指定我的 Windows Phone 设备连接到的“逻辑驱动器”?
delphi - Delphi WPD 事件回调 - 获取文件名
我正在尝试跟踪在 WPD 兼容设备(例如数码相机或 Android 手机)上创建文件的时间。我注册以接收事件Advice并且我的回调被正确调用,但我无法正确获取文件名(可能是 OBJECT_NAME)。这是我所拥有的:
我只得到垃圾而不是添加/删除的对象名称。我在这里想念什么?
c++ - 通过 WPD 访问 MTP 供应商扩展属性
我正在使用 Windows Portable Device API 来访问一些 MTP 设备。我想从设备中读取供应商扩展属性,它应该是这样的:
“microsoft.com/WPDNA”或“microsoft.com/MTPZ”
看起来这应该是一个非常简单的任务,但我无法弄清楚。
我已经能够枚举设备上的对象并传输文件等,这包含在WpdApiSample Application中。
我还发现了这篇我认为是我想做的文章。但我不明白如何创建这些查询。
delphi - 设备接口事件,获取设备名称
根据这篇博文,我编写了一些代码来检测 USB 设备:
一切正常,插入 USB 设备时我确实收到了事件,但问题是它sDevString始终是一个空字符串。我也尝试过检测 WPD 设备(通过设置rDbi.dbcc_classguid为正确的 GUID 值),它工作正常,除了我总是得到一个空字符串sDevString。如何获得正确的设备名称?
c++ - 任何用于检测 MTP 设备的 Windows API?
我正在寻找通过 Windows API 检测 MTP 设备,而不仅仅是枚举已连接的设备。
excel - 在 VBA 中引用 Windows 便携式设备文件时遇到问题?
我一直在不知疲倦地寻找解决问题的方法,但没有发现任何有用的东西!!所以我希望这里有人可以帮助我的具体情况......提前谢谢!
所以,我有一个条形码扫描仪,可以将库存作为文本文件存储在其内部存储器中。通过使用 Windows Mobile Device Center 6.1,我可以在我的 PC 上浏览扫描仪文件夹并打开该文本文件以查看我扫描的项目。
我正在编写一个 excel 宏,它将打开该文本文件,读取每一行库存,然后用它做其他事情。如果我将扫描仪上的文本文件复制到“我的文档”之类的地方,那么到目前为止我已经成功了。但是,我想让它变得简单,并且能够直接从扫描仪打开该文本文件。
我的问题是引用扫描仪的路径。因为它是便携式设备,所以它没有像 C: 这样的驱动器。相反,路径看起来像“Computer\MT2070-ML416147\Application\Inventory\export.txt”。但是,当我尝试打开该路径进行输入时,我收到一条错误消息“找不到路径”。
如果有人可以提供帮助,我将非常感激!如果有人需要我所拥有的代码片段,请告诉我。