访问移动设备 属性 数据
Access mobile device property data
有没有办法通过 C# 访问移动设备属性。目的是显示设备的序列号和 iOS USB 版本,如 iPhone.
使用如下所示的 WMI 查询可以访问可通过计算机管理器访问的基本信息,如 DeviceID 或 PnpDeviceID。但是我一直无法找到提供设备序列号等的 属性
ManagementObjectSearcher(@"Select * From Win32_USBHub WHERE Description LIKE 'Apple Mobile Device%'")
或
ManagementObjectSearcher(@"Select * From Win32_PnPEntity")
或
ManagementObjectSearcher("@Select * From Win32_USBControllerDevice")
我指的设备 属性 菜单在下图中,通过右键单击设备然后单击属性访问。
如果您想访问 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();
}
锁定 class 将允许您访问其他属性,例如 iOS 版本。
不过,它确实依赖于 iTunes。
将下面的代码放在 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();
有没有办法通过 C# 访问移动设备属性。目的是显示设备的序列号和 iOS USB 版本,如 iPhone.
使用如下所示的 WMI 查询可以访问可通过计算机管理器访问的基本信息,如 DeviceID 或 PnpDeviceID。但是我一直无法找到提供设备序列号等的 属性
ManagementObjectSearcher(@"Select * From Win32_USBHub WHERE Description LIKE 'Apple Mobile Device%'")
或
ManagementObjectSearcher(@"Select * From Win32_PnPEntity")
或
ManagementObjectSearcher("@Select * From Win32_USBControllerDevice")
我指的设备 属性 菜单在下图中,通过右键单击设备然后单击属性访问。
如果您想访问 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();
}
锁定 class 将允许您访问其他属性,例如 iOS 版本。
不过,它确实依赖于 iTunes。
将下面的代码放在 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();