本文共 1067 字,大约阅读时间需要 3 分钟。
在网上找了几个关于遍历串口的例子,要么代码不完整,要么就有Bug,如读不了串口号大于10以上的。
经过本人的整理,现分享最终代码,vs2008下编译通过。 //此方法同样适用于遍历windows开机启动项,只需稍加修改即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | void CEnumPortDlg::enumPort( void ) { HKEY hKey; LPCTSTR lpSubKey= "HARDWARE\\DEVICEMAP\\SERIALCOMM\\" ; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey)!= ERROR_SUCCESS) { return ; } #define NAME_LEN 100 char szValueName[NAME_LEN]; BYTE szPortName[NAME_LEN]; LONG status; DWORD dwIndex = 0; DWORD dwSizeValueName=100; DWORD dwSizeofPortName=100; DWORD Type; dwSizeValueName = NAME_LEN; dwSizeofPortName = NAME_LEN; do { status = RegEnumValue(hKey, dwIndex++, szValueName, &dwSizeValueName, NULL, &Type, szPortName, &dwSizeofPortName); if ((status == ERROR_SUCCESS)) { m_lstPort.AddString(( char *)szPortName); } //每读取一次dwSizeValueName和dwSizeofPortName都会被修改 //注意一定要重置,否则会出现很离奇的错误,本人就试过因没有重置,出现读不了COM大于10以上的串口 dwSizeValueName = NAME_LEN; dwSizeofPortName = NAME_LEN; } while ((status!= ERROR_NO_MORE_ITEMS)); RegCloseKey(hKey); } |
转载地址:http://uahki.baihongyu.com/