访问移动设备属性数据

时间:2018-11-13 12:51:01

标签: c# usb wmi-query

是否可以通过C#访问移动设备属性。目的是显示设备序列号和用于连接USB(如iPhone)的iOS版本。

使用如下所示的WMI查询,可以访问通过计算机管理器访问的基本信息,例如DeviceID或PnpDeviceID。但是我无法找到提供设备序列号等的属性。

ManagementObjectSearcher(@"Select * From Win32_USBHub WHERE Description LIKE 'Apple Mobile Device%'")

ManagementObjectSearcher(@"Select * From Win32_PnPEntity")

ManagementObjectSearcher("@Select * From Win32_USBControllerDevice")

我所指的设备属性菜单在下图中,通过右键单击设备然后单击属性来访问。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果要访问iOS版本等属性,最好的选择是使用imobiledevice-net

您可以安装imobiledevice-net NuGet软件包,然后运行如下命令:

ReadOnlyCollection<string> udids;
int count = 0;

var idevice = LibiMobileDevice.Instance.iDevice;
var lockdown = LibiMobileDevice.Instance.Lockdown;

var ret = idevice.idevice_get_device_list(out udids, ref count);

if (ret == iDeviceError.NoDevice)
{
    // Not actually an error in our case
    return;
}

ret.ThrowOnError();

// Get the device name
foreach (var udid in udids)
{
    iDeviceHandle deviceHandle;
    idevice.idevice_new(out deviceHandle, udid).ThrowOnError();

    LockdownClientHandle lockdownHandle;
    lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "Quamotion").ThrowOnError();

    string deviceName;
    lockdown.lockdownd_get_device_name(lockdownHandle, out deviceName).ThrowOnError();

    deviceHandle.Dispose();
    lockdownHandle.Dispose();
}

通过lockdown类,您还可以访问其他属性,例如iOS版本。

它确实带有对iTunes的依赖。

答案 1 :(得分:1)

lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, "Quamotion").ThrowOnError();之后放置以下代码,您将可以访问序列号或iOS版本之类的值。这只是一个粗略的例子:

        string t1;
        string t2;

        PlistHandle tested1;
        PlistHandle tested2;

        //Find serial number in plist
        lockdown.lockdownd_get_value(lockdownHandle, null, "SerialNumber", out 
        tested1);

        //Find IOS version in plist
        lockdown.lockdownd_get_value(lockdownHandle, null, "ProductVersion", out 
         tested2);

        //Get string values from plist
        tested1.Api.Plist.plist_get_string_val(tested1, out t1);
        tested2.Api.Plist.plist_get_string_val(tested2, out t2);

        //Place data in textboxes
        serialTXT.Text = t1.Trim();
        verTXT.Text = t2.Trim();