获取系统当前可用串口的两种方法

进行串口通信之前,需要获取当前系统的可用串口。要想达到此目的,有两种方式,读取注册表和使用CreateFile函数轮询读取串口。

1.使用CreateFile轮询读取串口:

 1 UINT CComDebugToolDlg::GetSerialPortState()
 2 {
 3      CString strCom;
 4     int nCom=0;
 5     HANDLE hCom;
 6
 7     do
 8     {
 9         nCom++;
10         strCom.Format("COM%d",nCom);
11
12         hCom=CreateFile(strCom,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);//轮询打开串口
13         if (INVALID_HANDLE_VALUE==hCom)
14         {
15             DWORD err=::GetLastError();
16         }
17         else
18         {
19             m_comCbx.AddString(strCom);
20         }
21         CloseHandle(hCom);//关闭串口
22     } while (nCom<256);
23     m_comCbx.SetCurSel(0);
24     return 0;
25 }

2.读取注册表

 1 UINT CComDebugToolDlg::GetSerialPortState()
 2 {
 3     LPCTSTR strReg="HARDWARE\\DEVICEMAP\\SERIALCOMM";
 4     HKEY hKey;
 5     CString strSerialPortList[256];
 6     int i=0;
 7
 8     long ret=0;
 9     DWORD dwIndex=0;
10     char name[25]={0};
11     DWORD dwName;
12     DWORD dwType;
13     UCHAR szPortName[25]={0};
14     DWORD szPortNameOfBytes=sizeof(szPortName);
15
16     ret=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strReg,0,KEY_READ,&hKey);
17     if (ret!=ERROR_SUCCESS)
18     {
19         return -1;
20     }
21
22     do
23     {
24         ret=RegEnumValue(hKey,dwIndex++,name,&dwName,NULL,&dwType,szPortName,&szPortNameOfBytes);
25         if (ret==ERROR_SUCCESS||ret==ERROR_MORE_DATA)
26         {
27             strSerialPortList[i]=(CString)szPortName;
28             m_comCbx.AddString(strSerialPortList[i]);
29             i++;
30         }
31
32     } while (ret=ERROR_SUCCESS||ret==ERROR_MORE_DATA);
33     RegCloseKey(hKey);
34
35     m_comCbx.SetCurSel(0);
36
37     return 0;
38 }
时间: 2024-09-29 17:15:17

获取系统当前可用串口的两种方法的相关文章

C#动态获取本机可用串口的两种方式

1. private void GetSerialPort() //获取串口列表 { RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); if (keyCom != null) { string[] sSubKeys = keyCom.GetValueNames(); foreach (string sName in sSubKeys) { string sV

获取母版页的相关内容有两种方法 --全了

获取母版页的相关内容有两种方法 1 通过findcontrol找控件ID需要在此事件中~因为Page_load中时是先内容页加载然后才是母版页加载    protected void Page_LoadComplete(object sender, EventArgs e)    {        Label2.Text = "现在时间是" + (Master.FindControl("Label1") as Label).Text;        if (Requ

RadioButon 获取单选按钮组选中值的两种方法!

在单选按钮中我们一般需要获得当前用户选择的按钮值是什么,想要得到用户的选择有两种方法. 第一种:在改变单选按钮组的值时获取.在改变单选按钮的值时获取选中项的值时,首先需要获取单选按钮组,然后为其添加OnCheckedChangeListener,并在onCheckedChanged()方法中根据参数checkedId获取被选中的单选按钮,并通过其getText()方法获取该单选按钮对应的值: 第二种:单击其他按钮时获取.首先需要在该按钮的单击事件的监听器的onClick()方法中,通过for循环

linux系统修改root密码的两种方法

当我们linux服务器的root密码忘记以后,需要进入单用户模式下修改密码.此时的做法是到grub页面,修改grub程序.我们知道grub有两种模式,一种是文本模式,一种是命令模式.我们可以到文本模式下修改,例如方法一.但是有时候,我们会遇到一个问题,就是在文本模式下修改grub之后,保存并启动需要按“ctrl + c”,有些控制台终端设备不支持“ctrl+c”热键.这样就面临一个问题,grub的文本模式修改后,无法保存并运行,此时我问使用方法二. 方法一:grub文本模式修改grub程序 在l

在装完Linux系统之后自己去修改Swap分区的大小(两种方法)

在装完Linux系统之后自己去修改Swap分区的大小(两种方法) 在安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swap分区.下面介绍这两种方法: 第一您必须有root权限,过程中一定要很小心,一不小心就破坏了整个硬盘的数据,执行下面的过程之前您需要三思而行,错误操作后的后果由执行者自己承担. 新建swap分区 1.以root身份进入控制台,输入 # swapoff -a          #停止交换分区 2. 用

两种方法检查Android是否已获取root权限

现在Android手机root权限可以说是轻松就获取得到的,而关于判断手机是否已经root的方法,你了解吗?如果app有一些特殊功能需要root权限,则需要判断是否root.不知道root是不是意味着手机不安全?说到底还是想一台究竟,你可以学习Android应用开发视频教程.下面介绍两种方法: 方法1: /*** @author Kevin Kowalewski**/public class Root { private static String LOG_TAG = Root.class.ge

串口调试,抓码的两种方法

1.使用的工具Accessport  和  QCom跨平台串口调试助手两个 2.抓码的两种方法 (一)使用Accessport工具中的监听功能,监听com端口获取16进制码 (二)使用Qcom打开串口作为接收端,接收软件发送来的16进制码  (此方法获取码率比较困难) 两个软件的地址 Accessport       http://www.sudt.com/ QCom  http://www.qter.org/?page_id=203

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad