//以下初始化串口COMBOX*************************************************
//从注册表中查看有几个串口
CString strSerialList[256]; // 临时定义 256 个字符串组,因为系统最多也就 256 个
HKEY hKey;//得到要打开键的句柄
LPCTSTR data_Set = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
if (ret0 != ERROR_SUCCESS)
{
return -1;
}
int i = 0;
TCHAR Name[25];//我想这个地方有问题*************
//在非UNICODE下面是char Name[25]
UCHAR szPortName[25];
LONG Status;
DWORD dwIndex = 0;
DWORD dwName;
DWORD dwSizeofPortName;
DWORD Type;
dwName = sizeof(Name);
dwSizeofPortName = sizeof(szPortName);
do
{
Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName);
MessageBox(Name);
if ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA))
{
strSerialList[i].Format(_T("%s"),szPortName);
m_cbxPort.AddString(strSerialList[i]);
i++; //串口计数
}
}while((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA));
RegCloseKey(hKey); m_cbxPort.SetCurSel(0); //串口COMBOX初始化完成**************************************************如果我把dwIndex++变成1,2,3,4,5数字
就可以得到正常的值。如果不直接用数据Name就一直是\Device\Serial1我想通过注册表得到有几个COM串口。有没有代码呀、
这个我搞了一个下午了。其实注册表里有COM1,COM5,COM6但通过这个函数只能得到COM5
//从注册表中查看有几个串口
CString strSerialList[256]; // 临时定义 256 个字符串组,因为系统最多也就 256 个
HKEY hKey;//得到要打开键的句柄
LPCTSTR data_Set = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
if (ret0 != ERROR_SUCCESS)
{
return -1;
}
int i = 0;
TCHAR Name[25];//我想这个地方有问题*************
//在非UNICODE下面是char Name[25]
UCHAR szPortName[25];
LONG Status;
DWORD dwIndex = 0;
DWORD dwName;
DWORD dwSizeofPortName;
DWORD Type;
dwName = sizeof(Name);
dwSizeofPortName = sizeof(szPortName);
do
{
Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName);
MessageBox(Name);
if ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA))
{
strSerialList[i].Format(_T("%s"),szPortName);
m_cbxPort.AddString(strSerialList[i]);
i++; //串口计数
}
}while((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA));
RegCloseKey(hKey); m_cbxPort.SetCurSel(0); //串口COMBOX初始化完成**************************************************如果我把dwIndex++变成1,2,3,4,5数字
就可以得到正常的值。如果不直接用数据Name就一直是\Device\Serial1我想通过注册表得到有几个COM串口。有没有代码呀、
这个我搞了一个下午了。其实注册表里有COM1,COM5,COM6但通过这个函数只能得到COM5
解决方案 »
- 关于win32 API 重定向
- google code在获取密码的时候被屏蔽,有什么新的解决办法吗?
- 如何让listBox平缓滑动。
- 谁帮忙解释下CADORecordBinding 这个类!
- 头文件包含问题,给点提示吧
- 通过数据源查找数据库文件路径
- 关于DataTimePicker控件改变字体颜色的问题!!
- 关于输入
- 急问:vb如何传递string给vc编的dll?我尝试了若干次总是出错,希望能提供例子!
- 多进程IE内核浏览器用InternetSetCookieEx设置httponly cookie无效?
- 求助:RAS 建立ADSL拨号,用户名和密码为空,可以吗?
- vb版没问出来,只好来这里问了(这个好象涉及到底层知识吧)
//从注册表中查看有几个串口
CString strSerialList[256]; // 临时定义 256 个字符串组,因为系统最多也就 256 个
HKEY hKey;//得到要打开键的句柄
LPCTSTR data_Set = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
if (ret0 != ERROR_SUCCESS)
{
return -1;
}
int i = 0;
TCHAR Name[25];
UCHAR szPortName[25];
LONG Status;
DWORD dwIndex = 0;
DWORD dwName;
DWORD dwSizeofPortName;
DWORD Type;
dwName = sizeof(Name);
dwSizeofPortName = sizeof(szPortName);
do
{
Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName);
MessageBox(Name);
if ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA))
{
//strSerialList[i] = CString(szPortName);//串口字符串保存
strSerialList[i].Format(_T("%s"),szPortName);
m_cbxPort.AddString(strSerialList[i]);
i++; //串口计数
}
}while((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA));
RegCloseKey(hKey); m_cbxPort.SetCurSel(0); //串口COMBOX初始化完成**************************************************
就可以得到正常的值。如果不直接用数据Name就一直是\Device\Serial1我想通过注册表得到有几个COM串口。有没有代码呀、
这个我搞了一个下午了。其实注册表里有COM1,COM5,COM6但通过这个函数只能得到COM5