请高手指点--关于串口的问题!
用电脑做通讯处理与到的2个问题:
1、如何用程序查询电脑中有几个串口?
2、如何得知他们的IRQ值?
------急需解决!如果能贴实用的代码,另外在奖100分,请高手帮忙!
[解决办法]
事情有进展了,今天看书的时候猛然想起,windows下运行程序的时候系统的控制权根本就被windows全部掌握着,要想真正访问bios数据,可能还是要到dos下才行。刚才试验了一下,同样的程序在不同的环境下运行,果然读出来的数据也有区别,搂住可以试一下!
[解决办法]
1)
直接查注册表: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM,里面列出的是目前能用的所有串口设备名和串口号。
还是试试这样
#include "windows.h "
int main()
{
char strName[128] = "COM1 ";
int count = 0;
int i = 1;
HANDLE hCom = 0;
while (hCom = CreateFile( strName, GENERIC_READ | OPEN_ALWAYS,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
))
{
if (hCom == INVALID_HANDLE_VALUE)
break;
count++;
sprintf(strName, "COM%d ", ++i);
}
printf( "%d ", count);
return 0;
}
[解决办法]
BOOL CCommPort::Enum(CStringArray &ports)
{
HKEYhKey;
LONGlRes;
BOOLbret = TRUE;
lRes = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
_T( "HARDWARE\\DEVICEMAP\\SERIALCOMM "),
NULL,
KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_READ,
&hKey );
if ( ERROR_SUCCESS == lRes ) {
TCHAR keyname[MAX_PATH] = {0};
TCHAR kvalue[20]= {0};
DWORD wcount= MAX_PATH;
DWORD vcount= 20;
DWORD index= 0;
DWORD regtype= REG_SZ;
while (ERROR_SUCCESS == lRes) {
wcount = MAX_PATH;
vcount = 20;
lRes = RegEnumValue( hKey, index++, keyname,
&wcount, NULL, ®type, (LPBYTE)kvalue, &vcount);
if ( ERROR_SUCCESS == lRes ) {
if ( ( vcount > 0 ) && ( wcount > 0 ) ) {
ports.Add( kvalue );
}
}
}
RegCloseKey( hKey );
}
else {
bret = FALSE;
}
return bret;
}