状况:
有个发送短信的设备,通过usb转com口的线连到pc上(Windows2000或XP),我在程序中(C语言)要在打开串口之前判断出,该设备插在了哪个串口上,即是COM几。问题:
请问有什么方法可以实现?我现在的思路是枚举所有串口,取得串口信息,因为该设备插到串口上时,名称跟别的串口不一样。
但是不知道如何枚举,还请知道的大侠帮忙回答下,谢谢了。
有个发送短信的设备,通过usb转com口的线连到pc上(Windows2000或XP),我在程序中(C语言)要在打开串口之前判断出,该设备插在了哪个串口上,即是COM几。问题:
请问有什么方法可以实现?我现在的思路是枚举所有串口,取得串口信息,因为该设备插到串口上时,名称跟别的串口不一样。
但是不知道如何枚举,还请知道的大侠帮忙回答下,谢谢了。
解决方案 »
- 虚拟键盘鼠标http://bbs.driverdevelop.com/
- 请问一个有关组播端口的问题
- Hook CEdit后,怎么判断CEdit的状态(可写、只读、失效)
- CListCtrl::GetNextItem 中的LVNI_FOCUSED , LVNI是什么的缩写呀?
- 可以方便的画出曲线吗?
- 如何在程序中获得其它可执行程序的执行结果?
- 前后增量与左值问题?????????
- 是否用类向导产生一个类都需要从列表中选取一个基类, 没有基类的类只能手工添加?
- 我能否在Vc中创建一种新的字体,然后在另外的软件中使用?(内空,如题)
- VC6 调用VS2008动态库时注意问题
- 树形控件通过XML访问某个文件
- 完成端口 和 非阻塞的 socket 以及 非阻塞connect 问题, 高手请入
CString strCom;
int nCom = 0;
int count = 0;
HANDLE hCom;
do {
nCom++;
strCom.Format("COM%d", nCom);
hCom = CreateFile(strCom, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (INVALID_HANDLE_VALUE == hCom)
break;
m_cbComList.AddString(strCom);
CloseHandle(hCom);
} while (1);
} //-------------------------------------------------------------- - // 串口信息都是保存在注册表的这个位置的 // HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM
HKEY hKey;
LONG ret;
OSVERSIONINFO osvi;
BOOL bOsVersionInfoEx;
char keyinfo[100],
comm_name[40],
ValueName[40];
int i;
DWORD sType,
Reserved,
cbData,
cbValueName;
hIcon = AfxGetApp() - > LoadIcon(IDI_HARDWARE);
SetIcon(hIcon, false);
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);
if (CommPortIsUsed(comm_name) == 1)
m_comlist.AddString(comm_name);
}
} else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
do {
cbData = 40;
cbValueName = 40;
memset(comm_name, 0, 40);
memset(ValueName, 0, 40);
ret = RegEnumValue(hKey, i, ValueName, & cbValueName, NULL, & sType, (LPBYTE) comm_name, & cbData);
if (ret == ERROR_SUCCESS) {
if (CommPortIsUsed(comm_name) == 1) m_comlist.AddString(comm_name);
i++;
}
} while (ret == ERROR_SUCCESS);
}
}
http://blog.csdn.net/tongxuechen1982/archive/2008/05/22/2469261.aspx