使用Unity搭UI 固额,C++封dll庫(kù)眠蚂,因?yàn)槭褂肅#比較多,所以Unity獲取電腦信息時(shí)會(huì)使用到Window的WMI庫(kù)斗躏,盡管其使用的運(yùn)行的速度比較面逝慧,但是很方便使用并且獲取信息,但是Unity中的支持C#是Mono版本的啄糙,所以WMI必須使用完整的.Net笛臣,所以使用了.Net 中的C#打包成命令臺(tái)的exe調(diào)用,下面是使用System.Management
使用Win32中的類(lèi) 通過(guò)SELECT * FROM Win32_USBController 來(lái)獲取信息隧饼,該方法相當(dāng)于獲取設(shè)備管理器中的所有信息沈堡,具體部分Win32信息可以百度查看
public static bool GetUSBController()
{
String result;
ManagementObjectSearcher Searcher = new ManagementObjectSearcher("SELECT * FROM Win32_USBController");
if (Searcher == null)
return false;
foreach (ManagementObject Share in Searcher.Get())
{
result = Share.GetPropertyValue("Description").ToString();
if (result.Contains("USB") && result.Contains("3.0"))
{
return true;
}
}
return false;
}
public static bool GetUSB3_0Ports()
{
// 獲取USB控制器及其相關(guān)聯(lián)的設(shè)備實(shí)體
ManagementObjectCollection USBControllerDeviceCollection = new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice").Get();
if (USBControllerDeviceCollection != null)
{
foreach (ManagementObject USBControllerDevice in USBControllerDeviceCollection)
{? // 獲取設(shè)備實(shí)體的DeviceID
Console.WriteLine(USBControllerDevice["Dependent"] as String);
String Dependent = (USBControllerDevice["Dependent"] as String).Split(new Char[] { '=' })[1];
ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE DeviceID=" + Dependent).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
Guid theClassGuid = new Guid(Entity["ClassGuid"] as String);? ? // 設(shè)備安裝類(lèi)GUID
String deviceID = Entity["PNPDeviceID"] as String;
String deviceDescription = Entity["Description"] as String;
if (deviceID.Contains("ROOT_HUB30"))
{
return true;
}
if (deviceDescription.Contains("USB") && deviceDescription.Contains("3.0"))
{
return true;
}
}
}
}
}
return false;
}
通過(guò)這個(gè)System.Management 中的接口獲取了硬件信息,可以避免各種不要麻煩桑李,例如調(diào)用Unity中的SystemInfo接口中封裝的硬件信息踱蛀,會(huì)有許多主板不能識(shí)別,最好的方法就是調(diào)用自己封裝dll庫(kù)調(diào)用贵白,可以通過(guò)C++封成dll庫(kù)率拒,然后通過(guò)C#對(duì)其整合,然后二次封裝成dll庫(kù)禁荒,這樣功能就不受限猬膨,只需要接口對(duì)應(yīng)UI即可,大大減小耦合和維護(hù)性~
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -? 誰(shuí)人多事種芭蕉? 早也瀟瀟? 晚也瀟瀟? ...