c#使便携式设备连接到PC
本文关键字:连接 PC 便携式 | 更新日期: 2023-09-27 18:12:26
我试图在Windows 7上获得所有usb设备(包括便携式设备)现在我到处找,也没有找到一个好的答案。
我试过这个代码:
static void Main(string[] args)
{
//
// Get an instance of the device manager
//
PortableDeviceApiLib.PortableDeviceManagerClass devMgr
= new PortableDeviceApiLib.PortableDeviceManagerClass();
//
// Probe for number of devices
//
uint cDevices = 1;
devMgr.GetDevices(null, ref cDevices);
//
// Re-allocate if needed
//
if (cDevices > 0)
{
string[] deviceIDs = new string[cDevices];
devMgr.GetDevices(deviceIDs, ref cDevices);
for (int ndxDevices = 0; ndxDevices < cDevices; ndxDevices++)
{
Console.WriteLine("Device[{0}]: {1}",
ndxDevices + 1, deviceIDs[ndxDevices]);
}
}
else
{
Console.WriteLine("No WPD devices are present!");
}
}
但是我得到这个错误:
互操作类型'portabledeviceapilib。portabledevicemanagerclass"不能嵌入
现在我被困住了。
如果你能帮我这个代码/给我一个想法我应该尝试,我会很高兴
所有我需要的是得到哪一种类型的USB连接,如果连接了电话,或者鼠标。我想知道连接的是什么
提前谢谢
我正在使用NuGet包PortableDevices(这是基于Christophe Geers的教程)。
源自教程的第一部分:
public void ListDevices()
{
var devices = new PortableDeviceCollection();
devices.Refresh();
foreach (var device in devices)
{
device.Connect();
Console.WriteLine(@"DeviceId: {0}, FriendlyName: {1}", device.DeviceId, device.FriendlyName);
device.Disconnect();
}
}
对@CodeFox的回答进行扩展,并且为了使他的代码ListDevices()
工作:
-
下载NuGet包PortableDevices
-
添加4个COM库的引用:
- PortableDeviceClassExtension
- PortableDeviceConnectApi
- PortableDeviceTypes
- PortableDeviceApi
-
将
obj'Debug
下的dll放到bin'Debug
中:- Interop.PortableDeviceClassExtension.dll
- Interop.PortableDeviceConnectApiLib.dll
- Interop.PortableDeviceTypesLib.dll
- Interop.PortableDeviceApiLib.dll
现在你可以使用这个函数,虽然FriendlyName
似乎不工作(它返回一个空字符串):
private IDictionary<string, string> GetDeviceIds()
{
var deviceIds = new Dictionary<string, string>();
var devices = new PortableDeviceCollection();
devices.Refresh();
foreach (var device in devices)
{
device.Connect();
deviceIds.Add(device.FriendlyName, device.DeviceId);
Console.WriteLine(@"DeviceId: {0}, FriendlyName: {1}", device.DeviceId, device.FriendlyName);
device.Disconnect();
}
return deviceIds;
}
我的下一步是从设备中获取内容,这是这样做的:
var contents = device.GetContents();