|
通过支持AT指令集的手机发送短消息(源代码)(18) memcpy( szSendBuf+len, p, strlen( p ) ); len += strlen( p ); delete [] p; if( bHandFree ) {// 00代表TP_PID值, 18或08代表TP_DCS,A7代表短消息保存24小时 memcpy( szSendBuf+len, "0018A7", 6 ); } else { memcpy( szSendBuf+len, "0008A7", 6 ); } len += 6; DWORD dw = PDUEncodeChn( pMsg, p ); sprintf( szTemp, "%.2X", dw ); memcpy( szSendBuf+len, szTemp, 2 ); len += 2; memcpy( szSendBuf+len, p, dw * 2 ); len += dw * 2; delete [] p; szSendBuf[len] = 0x1A;// 1A代表短消息结束 len += 1; memcpy( szSendBuf+len, "\r", 1 ); len += 1; Submit( szSendBuf, len ); dwRet = Deliver( pReceiveData ); if( dwRet > 0 ) { if( strstr( pReceiveData, szSendBuf ) != NULL ) { if( m_hWnd != NULL ) ::SendMessage( m_hWnd, PHONE_SMS_SUB, 0, 0 ); return( len ); } delete [] pReceiveData; pReceiveData = NULL; } return( 0 ); } long CGSMPhone::GetShortMsg(SMS_Recv *pSms) { if( m_bStarted == false ) return( -1 ); DWORD dwWaitRet = WaitForMultipleObjects( m_dwSMContentPoolNum, m_phSMPHaveData, FALSE, 1000 ); if( dwWaitRet != WAIT_TIMEOUT ) { DWORD dwMsgLen = m_pSMPool[dwWaitRet].dwSize; char* pszBuffer; pszBuffer = new char[dwMsgLen + 1]; ZeroMemory( pszBuffer, dwMsgLen + 1 ); CopyMemory( pszBuffer, m_pSMPool[dwWaitRet].pData, dwMsgLen ); delete [] m_pSMPool[dwWaitRet].pData; SetEvent( m_pSMPool[dwWaitRet].hSMPIDLE ); InterlockedDecrement( &m_dwSMNumberInPool ); int len = 0; char* p = pszBuffer; char szTemp[1024] = {0}; bool bEng = false; ZeroMemory( pSms, sizeof( SMS_Recv ) );
|