如何用VC把计算机中一共有几个串口检测出来?
解决方案 »
- Dll封装问题!急求大侠帮助!
- 为什么同样的代码我编译出的40K 光盘中28K?
- 在对话框显示位图(在线等)
- [急]小弟初用VC遇到问题未能包含ximage.h是不是我少装了什么
- 关于CRC的问题,看了好多帖子,还是不明白
- ------------后台运行的程序如何通过按键被激活跑到前台来?
- 一个关于clistctrl的焦点控制问题
- 谁能给我翻译一个64位上的托盘图标程序,代码是delphi的,同时有C++32位版的
- 请指教啊ADO连接数据库的问题
- 咨询VC6相关工具与技术清单
- 请问在函数内用CreateInstance创建的实例是栈内存还是堆内存?
- CListCtrl怎么样才能够.在一个Item如何才能得到鼠标的WM_LBUTTONUP事件
LONG ret;
OSVERSIONINFO osvi;
BOOL bOsVersionInfoEx;
char keyinfo[100],comm_name[200],ValueName[200], Uart[16];
int i;
DWORD sType,Reserved,cbData,cbValueName; ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
memset(keyinfo,0,100);
strcpy(keyinfo,"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_WINDOWS)
{
for(i=1;i<=128;i++)
{
sprintf(comm_name,"COM%d",i);
m_Uart.AddString(comm_name);
}
}
else 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 (strlen(comm_name) > 0)
{
// 检测出来的串口
}
i++;
}while (ret==ERROR_SUCCESS);
}
}
RegCloseKey(hKey);