You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
3.9 KiB
C++

//<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;
}