VC编程通过访问注册表得到串口数量的代码

bjfscasm 2010-05-29 04:54:34
使用MScomm控件时,无法得到串口数量。由于注册表记录了机器软硬件环境的各种信息,可以通过访问注册表得到串口的数量。在注册表的“HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM”键下面记录了串口的所有信息。VC中对注册表的操作函数很多,为了读取串口数量只需要下面的代码段。


CRegKey setreg;

LPCTSTR ps = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM");

LONG lResult = setreg.Open(HKEY_LOCAL_MACHINE, ps, KEY_READ);

if (ERROR_SUCCESS != lResult)

{

AfxMessageBox(_T("注册表打开失败!"));

}

TCHAR pszName[80] , pvalue[80];

LPBYTE data = new BYTE [80];

DWORD pnNameLength = 80;

DWORD lpcvaluename =80;

DWORD size =80;

DWORD type = REG_SZ;

CStringArray CSAcomport;

CString name;

int index = 0;

lResult = RegEnumValue(setreg.m_hKey, index, pszName, &lpcvaluename, NULL, &type, data, &size );

while (lResult != ERROR_NO_MORE_ITEMS && lResult == ERROR_SUCCESS)

{

name.Format("%s", data);

CSAcomport.Add(name);

index ++;

lpcvaluename = 80;

size = 80;

lResult = RegEnumValue(setreg.m_hKey, index, pszName, &lpcvaluename, NULL, &type, data, &size );

}

执行完这段代码后,在字符串数组CSAcomport中就存储了所有的串口名称,如“COM1,COM2...”。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bjfscasm/archive/2010/04/01/5441639.aspx
...全文
1237 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
_三皮_ 2011-09-22
  • 打赏
  • 举报
回复
谢谢分享
菜鸟一个 2011-09-17
  • 打赏
  • 举报
回复
来接分吧~ 爱显摆就显摆吧 ~ 我就要分~~~
神马都是浮云。
cjdxzy2010 2011-09-16
  • 打赏
  • 举报
回复
正好学习了,谢谢楼主,函数RegEnumValue是关键点
youhui_2010 2011-04-14
  • 打赏
  • 举报
回复
就需要这个,好东西。很有用啊
wangli820 2010-06-21
  • 打赏
  • 举报
回复
。。。。 啥意思?来显摆?
zsqhome_sina 2010-06-21
  • 打赏
  • 举报
回复

SHORT RWCenter::GetAllComm(){
HKEY hKey;
LONG ret;
SHORT retVal = 0;
OSVERSIONINFO osvi;
BOOL bOsVersionInfoEx;

TCHAR keyinfo[100],comm_name[200],ValueName[200];
int i;
DWORD sType,Reserved,cbData,cbValueName;

ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

memset(keyinfo,0,100*sizeof(TCHAR));
_tcscpy_s(keyinfo,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"));

i=0; sType=REG_SZ;Reserved=0;
bOsVersionInfoEx =GetVersionEx(&osvi);

ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyinfo,0,KEY_ALL_ACCESS,&hKey);

if (ret==ERROR_SUCCESS)
{
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
do
{
cbData=200;cbValueName=200;
memset(comm_name,0,200);
memset(ValueName,0,200);

ret=RegEnumValue(hKey,i,ValueName,&cbValueName,NULL,&sType,(LPBYTE)comm_name,&cbData);
if (ret==ERROR_SUCCESS)
{
//m_list.Add(comm_name);
int temp;
temp = _tstoi(&comm_name[3]);
retVal |= 1 << (temp -1);
i++;
}
}while (ret==ERROR_SUCCESS);
}
}

//CString strPortName = GetSetComName();
//m_ctrlPort.SetWindowText(strPortName);
RegCloseKey(hKey);

return retVal;
}
一条晚起的虫 2010-05-30
  • 打赏
  • 举报
回复
// 这个,接分算了。
// 最好把获取的结果再排个序,不然乱糟糟的。
不说害怕 2010-05-29
  • 打赏
  • 举报
回复

好东西...拿分
这不是鸭头 2010-05-29
  • 打赏
  • 举报
回复
呵呵。接个分。
soswaidao 2010-05-29
  • 打赏
  • 举报
回复
飘过来看看
用户 昵称 2010-05-29
  • 打赏
  • 举报
回复
果然是来布道的.
zhangnanonnet 2010-05-29
  • 打赏
  • 举报
回复
学习,飘过~~~~
zhangnanonnet 2010-05-29
  • 打赏
  • 举报
回复
。。。。 啥意思?来显摆?

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧