Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 28. Программа для отправки SMS сообщений

Дмитрий Иванов, Январь 2007
Статья впервые опубликованна 14 Мая 2014

Файлы к статье скачать

Рассмотрим еще одну крайне интересную, на мой взгляд, программу. Она позволяет отсылать SMS сообщения по указанному номеру. Скачайте файлы к этой статье и запускайте проект приложения. Внешне она очень похожа на программу из предыдущей статьи, и большая часть кода наследуется из нее.

Принцип работы с ней следующий: в 1-ое edit-окошко вводится номер COM порта, к которому подключен телефон и с помощью кнопки Open Port проводится открытие порта. Если порт открыт успешно, во 2-ое edit-окошко вводится номер телефона, на который нужно отправить SMS. В 3-е вводится текст (только цифры и английские буквы !) SMS сообщения. Нажав кнопку Send SMS сообщение полетит своему адресату. Теперь давайте посмотрим, а что же там происходит в нутри.

Код относящийся к открытию порта полностью аналогичен прерыдущей программе, поэтому я на нем останавливаться не буду. Единственное что необходимо добавить, так это переменную для 3-го edit-окошка под именем m_SMStext типа CString.

Теперь давайте посмотрим на обработчик кнопки Send SMS. Чтобы отправить SMS на SE T630 придется "попариться" побольше, т.к. комада отправки сообщения состоит из трех последовательных вызовов промежуточных команд. С начала с помощью команды ATV+CMGF с параметром 1 мы переводим аппарат в режим при котором SMS сообщение которе нужно отправить воспринимается как текстовые символы. Если бы параметр был бы 0, то нам пришлось бы каждый симовл кодировать в специальный бинарный поток (режим PDU). Текстовый режим имеет тот плюс, что можно быстро и просто отправить SMS, но он не поддеоживает русские буквы. Режим PDU гораздо сложнее, но и позволяет отправлять сообщения практически на любом языке. Далее делается небольшая пауза, необходимая для того что телефон успел переварить то что мы ему уже отослали. Может быть пол секунды это многовато, но сколько нибудь надо, ибо если задержку вообще не делать то могут возникнуть проблемы (проверено на практике). Затем идет отправка первой части команды AT+CMGS, с помощью которой мы указываем на какой номер отправить SMS. Затем вторая часть, состоящая из текста сообщения и ряда вспомогательных символов. Ее полный синтаксис имеет вид: AT+CMGS="[номер телефона]"\r[текст сообщения]\x1a\r\n, где 0x1A - код комбинации Ctrl-Z (да, вот такой вот уж формат).

void CTelefonDlg::OnSendSMS() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);

	DWORD lpdwBytesWritten;

	char sz[]="ATV+CMGF=1\r";	
	WriteFile(m_hFile, sz, strlen(sz), &lpdwBytesWritten, NULL);	
	Sleep(500);
		
	
	CString s1;
	s1="AT+CMGS=\"";
	s1+=m_TelNumber;
	s1+="\"\r";
	char* pBuffer = s1.GetBuffer(20);	
	WriteFile(m_hFile, pBuffer, strlen(pBuffer), &lpdwBytesWritten, NULL);
	s1.ReleaseBuffer();
	Sleep(500);


	CString s2;	
	s2=m_SMStext;
	s2+="\x1a\r\n";
	char* pBuffer2 = s2.GetBuffer(50);	
	WriteFile(m_hFile, pBuffer2, strlen(pBuffer2), &lpdwBytesWritten, NULL);
	s2.ReleaseBuffer();

	MessageBox("Message send", "Info", MB_ICONINFORMATION);	
}


© Дмитрий Иванов
Январь 2007
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017