gpt4 book ai didi

vb.net - 在 Visual Basic .NET 中访问 MTP/WPD 设备

转载 作者:行者123 更新时间:2023-12-01 00:31:02 26 4
gpt4 key购买 nike

是否有任何可用于 VB.net 的库使我能够轻松访问 MTP 设备?我希望能够找出连接了哪些设备,列出它们的内容并在它们之间复制文件。

到目前为止,我所看到的一切(无论是在 Stack Overflow、Microsoft 网站上还是通过简单的 Google 搜索)都是用 C++、C# 或其他一些不是 VB.net 的语言编写的。 Microsoft 文档完全超出了我的想象。

因此,除非我打算学习一门新语言,否则这一切都是徒劳的。

我确实找到了 MTPSharp这给了我希望。但是没有文档,它似乎没有完全实现,我尝试做某些事情会返回异常,作者告诉我它是针对我不应该使用的旧 API 编写的,无法帮助我解决我有问题。

想用VB.net的人真的没有希望了吗?

最佳答案

一个窗口便携设备类库

注意:这是 Christophe Geers 的作品,来自一系列博客,可以是 found here

我主要是加了几个函数,一个VB控制台测试,转成Class Lib。我在代码中调整了一些东西以简化它,但它们不值得一提。

文档:

学习 Mr Geers' blog .

Visual Studio 的 IntelliSense 在识别可用的属性和方法方面也很有值(value)。

重要提示

警告

我的可移植设备很少(而且找不到),所以测试非常有限。

文件和文件夹

在这种情况下,术语 FileFolder 可能会产生误导。

正如文章所说,有一个 PortableDeviceObject 类型(类),PortableDeviceFilePortableDeviceFolder 都从该类型(类)继承。 PortableDeviceObject 有一个名为 Files 的属性集合,但该集合实际上包含 PortableDeviceObject。该集合中的任何一项实际上都可能是另一个文件夹。

我也开始实现 Folders 集合,然后弄清楚为什么会这样。由于文件夹可以包含子文件夹,因此将文件链接到子文件夹到文件夹到 PortableDevice 会更加困惑和成问题。所以,我离开了它。

这意味着 Files 集合中的每个项目都必须进行测试,以查看它是否真的是 FileFolder 。这通常可以通过以下两种方式之一完成:

' using VB operator
If TypeOf item Is PortableDeviceFolder Then
Console.Beep()
End If

' using NET Type method
If item.GetType Is GetType(PortableDeviceFolder) Then
Console.Beep()
End If

为了让事情稍微更简单和更面向对象,我在 PortableDeviceObject 中添加了一个 IsFileIsFolder 函数这允许:

If item.IsFolder Then
DisplayFolderContents(dev, CType(item, PortableDeviceFolder))
End If

还有一个方法可以返回 ItemType 枚举值(还有一个静态版本可能有用):

' using GetItemType
If item.GetItemType = PortableDeviceObject.ItemTypes.File Then
Console.Beep()
End If

资源

Geers 先生的 original source

Another C# Project对于 WPD 可能有用

MSDN Windows Portable Devices documentation在您准备好稍后制作模组时了解更多信息。

一个 VB 控制台应用程序(只是一个翻译)展示了如何使用其中的一些功能。研究博客的详细信息。

代码很长,会在很大程度上复制 Geers 先生的博客,而且我不愿意发布不是我的代码。此外,如果您不能将 C# 代码编译为 DLL,那么显然对您没有什么好处。那么,为了回答提出的问题,是否有任何可用于 VB.net 的库可以让我轻松访问 MTP 设备?:

是的。修改后的源、项目文件(VS2012)、新的VB控制台测试应用和二进制文件(PortableDevices.dll)可以是downloaded from DropBox . bin/compile 文件夹包括适用于 AnyCPU/Release 和 x86/Release 的 Builds

  • 认为您会希望将 Interop.* DLL 与 PortableDevice.DLL 一起保存在这些文件夹中。例如,将它们与 DLL 一起复制到您的工具目录中。我不知道他为什么那样做。
  • 要在项目中使用新的 Class Lib,您显然需要添加对全新 PortableDevice.DLL 的引用。

当然,您可以使用项目源文件加载它并重新编译为您想要的任何格式。 VS 编译 C# 项目的方式与在 VB 中相同。

enter image description here

在我的机器上工作TM

再次声明,这不是我的工作。我主要是编译成DLL。

关于vb.net - 在 Visual Basic .NET 中访问 MTP/WPD 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514869/

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