您的位置:首页 > 其它

.net获取串口列表

2013-07-20 08:30 274 查看
//方法一
String[] Str2 = System.IO.Ports.SerialPort.GetPortNames();
if (Str2.Length > 0)
{
for (int k = 0; k < Str2.Length; k++)
{
comboBoxEdit1.Properties.Items.Add(Str2[k]);
}
}
//方法二
String[] Str2 = Gprs.GetSerialPortNames();
if (Str2.Length > 0)
{
for (int k = 0; k < Str2.Length; k++)
{
comboBoxEdit1.Properties.Items.Add(Str2[k]);
}
}
//方法三
RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
if (keyCom != null)
{
string[] sSubKeys = keyCom.GetValueNames();
comboBoxEdit1.Properties.Items.Clear();
foreach (string sName in sSubKeys)
{
string sValue = (string)keyCom.GetValue(sName);
comboBoxEdit1.Properties.Items.Add(sValue);
}
}


其中方法二的方法不是.net自带的需要自己写:

public string[] GetSerialPortNames()
{
string[] ports = null;
List<string> portsList = new List<string>();
uint HKEY_LOCAL_MACHINE = 0x80000002;
int hKey = -1;
int ret = RegOpenKey(HKEY_LOCAL_MACHINE, @"Hardware\DEVICEMAP\SERIALCOMM", ref hKey);
try
{
if (ret == 0)
{
int index = 0;
int BufferSize = 255;
int ERROR_NO_MORE_ITEMS = 259;
string valueName = "".PadRight(BufferSize, ' ');
int valueNameLength = BufferSize;
int valueLength = BufferSize;
string value = "".PadRight(BufferSize, ' ');
while (RegEnumValue(hKey, index, ref valueName, ref valueNameLength, 0, 0, ref value, ref valueLength) != ERROR_NO_MORE_ITEMS)
{
if (valueLength > 0)
{
if (value[valueLength - 1] == 0)
valueLength -= 1;
portsList.Add(value.Substring(0, valueLength));
}
index += 1;
valueName = "".PadRight(BufferSize, ' ');
valueNameLength = BufferSize;
valueLength = BufferSize;
}
}
}
catch (Exception)
{
}
finally
{
if (ret == 0)
RegCloseKey(hKey);
}
if (portsList.Count == 0)
ports = new string[0];
else
ports = portsList.ToArray();
return ports;
}


这里的三个方法第一个使用的是.net自带的类进行函数调用,第二个是使用win32 的api方法,第三个是读取注册表信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: