|
|
|
|
//<2F><><EFBFBD>ܣ<EFBFBD>ʵ<EFBFBD>ִ<EFBFBD><D6B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD>
|
|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
#include "ComControlFunction.h"
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>õĴ<C3B5><C4B4>ںţ<DABA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĴ<D0B5><C4B4>ںű<DABA><C5B1><EFBFBD><EFBFBD><EFBFBD>pPortList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>portNumber<65><72><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD>pPortList
|
|
|
|
|
//pPortList<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
BOOL ScanPCCom( int *pPortList, int& portNumber )
|
|
|
|
|
{
|
|
|
|
|
portNumber = 0; //ϵͳ<CFB5><CDB3><EFBFBD>õĴ<C3B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//ɨ<><C9A8>PC<50><43><EFBFBD><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4>ڣ<EFBFBD><DAA3><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ڵĴ<DAB5><C4B4>ڡ<EFBFBD>
|
|
|
|
|
UINT nComNum = 0;
|
|
|
|
|
HKEY hKEY = NULL;
|
|
|
|
|
LONG hResult = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T( "HARDWARE\\DEVICEMAP\\SERIALCOMM" ), 0, KEY_READ, &hKEY );
|
|
|
|
|
|
|
|
|
|
if ( hResult != ERROR_SUCCESS ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>hKEY,<2C><><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TCHAR strInf[30];
|
|
|
|
|
memset( strInf, 0, sizeof( TCHAR ) * 30 );
|
|
|
|
|
|
|
|
|
|
DWORD type_1 = REG_SZ;
|
|
|
|
|
DWORD cbData_1 = 10;
|
|
|
|
|
DWORD aa = 30, num = 0;
|
|
|
|
|
DWORD a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0, a7 = 0;
|
|
|
|
|
|
|
|
|
|
//hResult = ::RegQueryInfoKey( hKEY, strInf, &a7, NULL, &a3, &a1, &a2, &num, &a4, &a5, &a6, NULL );
|
|
|
|
|
hResult = ::RegQueryInfoKeyA( hKEY, NULL, NULL, NULL, &a3, &a1, NULL, &num, &a4, &a5, NULL, NULL );
|
|
|
|
|
if ( hResult != ERROR_SUCCESS )
|
|
|
|
|
{
|
|
|
|
|
RegCloseKey( hKEY );
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BYTE portName[15];
|
|
|
|
|
memset( portName, 0, 15 );
|
|
|
|
|
|
|
|
|
|
CString csr = _T( "" );
|
|
|
|
|
|
|
|
|
|
for ( DWORD i = 0 ; i < num ; ++i )
|
|
|
|
|
{
|
|
|
|
|
aa = 30 ;
|
|
|
|
|
cbData_1 = 10;
|
|
|
|
|
hResult = ::RegEnumValue( hKEY, i, strInf, &aa, NULL, &type_1, portName, &cbData_1 );
|
|
|
|
|
if ( hResult != ERROR_SUCCESS )
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
csr.Format( _T( "%s" ), portName );
|
|
|
|
|
|
|
|
|
|
csr.Delete( 0, 3 );
|
|
|
|
|
|
|
|
|
|
pPortList[portNumber] = atoi( csr );
|
|
|
|
|
|
|
|
|
|
++portNumber; //ϵͳ<CFB5><CDB3><EFBFBD>õĴ<C3B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
++nComNum;
|
|
|
|
|
}
|
|
|
|
|
RegCloseKey( hKEY );
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>жϴ<D0B6><CFB4><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ռ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF>÷<EFBFBD><C3B7><EFBFBD>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
|
|
|
|
|
bool OnCheckComPort( const CString& portName )
|
|
|
|
|
{
|
|
|
|
|
CString str = _T( "//./" ) + portName;
|
|
|
|
|
HANDLE hCom = CreateFile( str, //<2F><EFBFBD><F2BFAAB4><EFBFBD>1
|
|
|
|
|
GENERIC_READ | GENERIC_WRITE, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|
|
|
|
0, //<2F><>ռ<EFBFBD><D5BC>ʽ
|
|
|
|
|
0, OPEN_EXISTING, //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD>
|
|
|
|
|
0, 0 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( hCom == INVALID_HANDLE_VALUE ) //<2F><EFBFBD><F2BFAAB4><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CloseHandle( hCom );
|
|
|
|
|
hCom = NULL;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>жϴ<D0B6><CFB4><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>շ<EFBFBD><D5B7><EFBFBD>true,<2C><><EFBFBD><EFBFBD>false
|
|
|
|
|
bool CheckComPortIsEmpty( const CString strPort )
|
|
|
|
|
{
|
|
|
|
|
if ( strPort.Compare( _T( "" ) ) == 0 )
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>True<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
|
|
|
|
|
bool CompareTwoComPort( const CString port1, const CString port2 )
|
|
|
|
|
{
|
|
|
|
|
if ( ( port1.Compare( port2 ) ) == 0 )
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>жϴ<D0B6><CFB4><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>true,<2C><><EFBFBD><EFBFBD>false
|
|
|
|
|
bool CheckComPortCanWork( const CString strPort )
|
|
|
|
|
{
|
|
|
|
|
if ( strPort.GetLength() <= 4 )
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString str = strPort;
|
|
|
|
|
str.Delete( 0, 4 ); //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1>ַ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
CString strSelectCom = _T( "" );
|
|
|
|
|
strSelectCom.Format( "COM%d", atoi( str ) );
|
|
|
|
|
|
|
|
|
|
if ( !OnCheckComPort( strSelectCom ) ) //<2F><><EFBFBD>ڱ<EFBFBD>ռ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>false
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else //<2F><><EFBFBD>ڿ<EFBFBD><DABF>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>true
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XX<58><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>true, <20><><EFBFBD><EFBFBD>false
|
|
|
|
|
bool CheckComPortName( const CString strPort )
|
|
|
|
|
{
|
|
|
|
|
if ( strPort.GetLength() < 5 )
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
CString str = strPort;
|
|
|
|
|
|
|
|
|
|
if ( str.Left( 4 ) != _T( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" ) )
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
str = strPort;
|
|
|
|
|
str.Delete( 0, 4 );
|
|
|
|
|
|
|
|
|
|
for ( int i = 0; i < str.GetLength(); ++i )
|
|
|
|
|
{
|
|
|
|
|
if ( ( str.GetAt( i ) < '0' ) || ( str.GetAt( i ) > '9' ) )
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
//<2F>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD>в<EFBFBD><D0B2>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>õĴ<C3B5><C4B4>ں<EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD>룺<EFBFBD><EBA3BA><EFBFBD><EFBFBD>portArray<61><79><EFBFBD><EFBFBD><EFBFBD>鳤<EFBFBD><E9B3A4>arrLength<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>itemValue
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>λ<EFBFBD><CEBB>pos
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ҳɹ<D2B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
|
|
|
|
|
bool FindItemFromComList( int& pos, const int *portArray, const int& arrLength, const int& itemValue )
|
|
|
|
|
{
|
|
|
|
|
for ( int i = 0; i < arrLength; ++i )
|
|
|
|
|
{
|
|
|
|
|
if ( itemValue == portArray[i] )
|
|
|
|
|
{
|
|
|
|
|
pos = i;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|