Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
12th
Май
Отправка SMS посредством АТ команд через мобильник
Posted by Chas under Топик-обзор
Пречитал кучу инфы. но так и непонял как отправку реализовать в delphi. Можно увидеть пример как это делается.Просто два поля там где вводить номер +7ХХХХХХХХХХ и где текст самого СМС , при нажатии на Button1 отправка.
dmitriegorovih:
Сам перекопал много интернета вообщем нашёл где-то в ядре
procedure Tform10.SendSMS(nTel: String);
var
lngt, i: Integer;
nmes, m, tel, vi: String;
h:THandle;
begin
h:=CreateEvent(nil, true,false, 'et');
m := memo1.Text;
// Полуоктеты представляют десятичные цифры, и, например, номер отправителя получается
// при перестановке десятичных цифр в каждом октете: от "72 38 88 09 00 F1" к "27 83 88 90 00 1F".
// Длина телефонного номера нечетна, поэтому в последний октет добавлен F.
if Length(nTel) mod 2 = 1 then
nTel := nTel + 'F';
for i := 1 to Length(nTel) do
if i mod 2 = 0 then
tel := tel + nTel + nTel[i-1];
nmes := '00'; // Длина информации о SMSC. Длина - 0 означает, что для отправки СМС должен использоваться номер SMSC,
// сохраненный в телефоне. Этот октет является дополнительным.
//Для некотоорых телефонов этот октет должен быть опущен! (Но все равно будет использоватьтся СМСЦ, сохраненный в телефоне.
nmes := nmes + '11'; // Первый октет SMS-SUBMIT
nmes := nmes + '00'; // TP-Message-Reference. Значение 0х00 указывает на то, что в качестве номера телефона отправителя будет использоваться номер.
nmes := nmes + '0B'; // Длина номера получателя (11)
nmes := nmes + '81'; // Тип-адреса. (91 указывает международный формат телефонного номера, 81 - местный формат).
nmes := nmes + tel; // Телефонный номер получателя в международном формате в полуоктетах (46708251358).
//Если указать номер телефона в местном формате (Type-of-Address равен 81 вместо 91), то для указания номера телефона можно было бы использовать
//10 октетов (0x0A) и октеты были бы представлены как 7080523185 (0708251358).
nmes := nmes + '00'; // TP-PID. Идентификатор протокола
nmes := nmes + '00'; // TP-DCS.
nmes := nmes + 'A8'; // TP-Validity-Period. "AA" означает 4 дня. Этот октет является дополнительным, см. 4 и 3 первого октета
nmes := nmes + IntToHex(Length(m),2); // TP-User-Data-Length. Длина сообщения.
nmes := nmes + Encode7bit(m); // TP-User-Data. Эти октеты представляют сообщение "hellohello", преобразованное в 7 битку.
lngt := Round((length(nmes)-2)/2);
form1.Memo1.Lines.Add('AT+CMGS='+IntToStr(lngt)+#13);
form1.Memo1.Lines.Add(nmes);
form1.bcomport1.WriteStr('at+cmgf=0'+#13);
WaitForSingleObject(h,3000);
form1.BComPort1.WriteStr('AT+CMGS='+IntToStr(lngt)+#13);
WaitForSingleObject(h,3000);
form1.BComPort1.WriteStr(nmes+#26);
end;
Отправка латиницы, а вот отправка кирилицы
procedure TForm10.send_SMS_na_russkom(nomer_tel:string);
var
nmes,tel:string;
h:THandle;
i:integer;
begin
h:=CreateEvent(nil, true,false, 'et');
if Length(nomer_tel) mod 2 = 1 then
nomer_tel := nomer_tel + 'F';
for i := 1 to Length(nomer_tel) do
if i mod 2 = 0 then
tel := tel + nomer_tel + nomer_tel[i-1];
nmes:='';
nmes:='0011000B81'+tel+'0008A8'+inttohex(length(memo1.Text)*2,2)+ucs2(memo1.Text);
form1.BComPort1.WriteStr('AT+CMGF=0'+#13);
form1.Memo1.Lines.Add('AT+CMGF=0');
WaitForSingleObject(h,1000);
form1.BComPort1.WriteStr('AT+CMGS='+inttostr((length(nmes)-2) div 2)+#13);
form1.Memo1.Lines.Add('AT+CMGS='+inttostr((length(nmes)-2) div 2));
WaitForSingleObject(h,1000);
form1.BComPort1.WriteStr(nmes+#26);
form1.Memo1.Lines.Add(nmes);
end;
Необходимые функции
function ucs2(s: string): string;
var i,k: integer;
begin
for i:=1 to length(s) do begin
k:= ord(s);
if k>=192 then k:= k + 1040 - 192;
result:= result + inttohex(k,4)
end
end;
function Encode7bit(Src:String):String;
var Dst:String;
i:Integer;
CurS,NextS:Byte;
TStr:String;
begin
for i:=1 to Length(Src) do begin
if (i mod 8)=0 then Continue;
TStr:=Copy(Src,i,1);
CurS:=Ord(TStr[1]);
if (i mod 8)>1 then
CurS:=(CurS shr ((i mod 8)-1) );
if i
Компонент.rar (16.0 Кб, 130 просмотров)
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)