public static string GetSerialPort()
{
return MulGetHardwareInfo(HardwareEnum.Win32_SerialPort, "Name");
}
//枚舉win32 api
public enum HardwareEnum
{
Win32_SerialPort
,
Win32_SerialPortConfiguration
,
Win32_SerialPortSetting
}
public static string MulGetHardwareInfo(HardwareEnum hardType, string propKey)
{
string strs = "";
string ttt = "STMicr";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + hardType);
var hardInfos = searcher.Get();
foreach (var hardInfo in hardInfos)
{
if (hardInfo.Properties[propKey] != null)
{
strs = hardInfo.Properties[propKey].Value.ToString();
string id = Convert.ToString(strs.Substring(0, 6));
if (id == ttt)
{
strs = Convert.ToString(strs.Substring(37, 5));
}
else
{
strs = "No Found";
}
}
}
return strs;
}
大概的意思是 從數據庫裡取出某字段 循環檢查值的前6位是不是和STMicr相等,如果等則取某一字段。
但是這段代碼沒有實現上述功能,也就是說有bug:
1、strs.Substring(37, 5) ,沒有這種取值方式。
2、strs = Convert.ToString(strs.Substring(37, 5));取出的字符串只存在臨時變量中,下一次循環會把查詢結果覆蓋,除非hardInfos的元素只有一個,不然該方法返回的總是最後一個元素的相應字段,沒有意義