VB.net是否有可用的库使我能够轻松访问MTP设备?我希望能够找出已连接的设备,列出它们的内容并向它们复制文件。
到目前为止,我所看到的所有内容(无论是在Stack Overflow上,在Microsoft网站上,还是通过简单的Google搜索)都是C ++,C#或其他不是VB.net的语言。 Microsoft文档完全让我烦恼。
因此,除非我计划学习一种新语言,否则所有这些都不是入门者。
我确实找到了MTPSharp,它给了我希望。但是没有文档,它似乎还没有完全实现,我做某些事情的尝试返回了一个异常,而作者告诉我,它是针对我不应该使用的旧API编写的,因此无法帮助我我有问题。
对于想要使用VB.net的人真的没有希望吗?
注意:这是Christophe Geers的作品,来自一系列博客,可以是found here
我主要添加了一些功能,VB控制台测试,并将其转换为Class Lib。我对代码中的一些内容进行了调整,以简化代码,但是这些内容不值得进一步提及。
文档:
Study Mr Geers' blog。
Visual Studio的IntelliSense在识别可用的属性和方法上也将很有价值。
注意
我的便携式设备很少(找不到一个),因此测试相当有限。
文件和文件夹
在此上下文中,术语File
和Folder
可能会产生误导。
如本文所述,PortableDeviceObject
和PortableDeviceFile
都是从PortableDeviceFolder
类型(类)继承的。 PortableDeviceObject
有一个名为Files
的属性集合,但该集合实际上包含PortableDeviceObject
。该集合中的任何一项实际上都可能是另一个文件夹。
我也开始实现Folders集合,然后找出原因。由于文件夹可以包含子文件夹,因此将文件链接到子文件夹再将文件夹链接到PortableDevice会更加混乱和麻烦。所以,我离开了。
这意味着必须对Files
集合中的每个项目进行测试,以查看它是否确实是File
或Folder
。通常,这可以通过以下两种方式之一完成:
' 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
为了使事情[[略]]更简单和面向对象,我向IsFile
添加了IsFolder
和PortableDeviceObject
函数,该函数允许: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
资源
对于WPD可能是有用的Another C# Project
[MSDN Windows Portable Devices documentation了解更多信息,以备日后制作Mod时使用。
VB控制台应用程序(仅翻译)显示了如何使用某些功能。研究博客的详细信息。
代码很长,将在很大程度上复制Geers先生的博客,而我不愿意发布不是我的代码。此外,如果无法将C#代码编译为DLL,那么显然对您没有什么帮助。因此,要回答提出的问题,
VB.net是否有可用的库使我能够轻松访问MTP设备?
:是
修改后的源代码,项目文件(VS2012),新的VB控制台测试应用程序和二进制文件(PortableDevices.dll
)可以为downloaded from DropBox。 bin / compile文件夹包括适用于AnyCPU / Release和x86 / Release的内部版本Interop.*
保留位于这些文件夹中的PortableDevice.DLL
DLL。例如,将它们与DLL一起复制到您的工具目录中。我不确定他为什么这样做。PortableDevice.DLL
的引用。<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9sS0FDNS5qcGcifQ==” alt =“在此处输入图像说明”>
在我的机器上工作TM