Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 5.00
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
#1

Возможно ли как нибудь отправить SMS? - C++ Builder

18.01.2011, 19:07. Просмотров 6867. Ответов 31
Метки нет (Все метки)

Добрый вечер! Возможно ли мне как нибудь отправить SMS на мой мобильный (Бесплатно)? Можно не текст, хотя-бы уведомление. Может надо с каким нибудь сайтов интегрировать мою прогу. Прошу помочь или хотя бы дать совет.
PS: Если важно, то номер на который я хочу отправить начинается на +7 или 8. За ранее благодарю.
http://www.cyberforum.ru/delphi-networks/thread61682.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2011, 19:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возможно ли как нибудь отправить SMS? (C++ Builder):

Как отправить SMS на C#?
Может не совсем в тему вопрос, но у меня есть необходимость, чтобы приложение...

Как отправить SMS с оператора Beeline
Никак не могу написать что-то подобное на билайн Option Explicit 'Объявляем...

Как отправить с сайта SMS сообщение?
Подскажите, как отправить с сайта SMS сообщение?

Как программно отправить SMS на Cell phone?
Господа, помогите, как можно программно с помощью ASP отправлять SMS?

Как указать с какой SIM отправить SMS
Здравствуйте, я отправляю SMS через функцию smsManager.sendTextMessage(n1,...

31
LK
Заблокирован
18.01.2011, 19:49 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/* Для начала необходимо разобраться как происходит
отправка sms через инернет. Вы вводите номер телефона 
и текст сообщения, а затем отправляете. 
Через некоторое время сообщение будет доставлено адресату. 
Разные GSM операторы по-разному обрабатывают сообщения, 
у всех разные системы отправки, скрипты. Но целом, все 
одинаково. так, мы решили написать программу для отправки sms черезprocedure SendToMTS;
Интернет. Визуальную часть проектирования касаться не будем, 
а посмотрим как сформировать пакет для отправки оператору. 
Для примера возьмем МТС. Вся информация (номер телефона, 
текст сообщения, крайние время отправки) отсылается следующему скрипту:
[url]http://www.mts.ru/cgi-bin/cgi.exe?function=sms_send[/url] 
Информация хранится в следующих полях: */
 
To= // номер телефона, вида 7xxxxxxxxxx
Msg= // текст сообщения
Hour=,Min=,Day=,Mon=,Year=   // крайние время отправки сообщения
 
// Теперь несложно написать процедуру отправки сообщения:
 
var
  strPostData: string;
  Data: Pointer;
  URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
 strPostData := 'To='+PhoneNumField.text+'&Msg=' 
        + TextField.Text +
         '&Hour=20&Min=23&Day=22&Mon=02&Year=2002';
  PostData := VarArrayCreate([0,Length(strPostData) -1], varByte);
  Data := VarArrayLock(PostData);
  try
    Move(strPostData[1], Data^, Length(strPostData));
  finally
    VarArrayUnlock(PostData);
  end;
  URL:='http://www.mts.ru/cgi-bin/cgi.exe?function=sms_send';
  Flags := EmptyParam;
  TargetFrameName := EmptyParam;
  Headers := EmptyParam; // TWebBrowser автоматически заполнит
                         // эти заголовки соответствующими 
                         // значениями
  form1.WebBrowser1.Navigate2(URL, Flags, 
 TargetFrameName, PostData, Headers);
end;
 
/* Все, что нам нужно это поместить на форму компоненту TWebbrowser. 
Через него и будет происходить отправка. Давайте теперь 
разберемся в том, что мы написали. Переменная strPostData 
хранит наименование полей и их содержимое в виду обычной строки. 
Но для корректной работы, мы должны преобразовать строку 
в нормальный вид. Всю информация мы преобразовали 
в переменную PostData. Переменной URL указываем путь 
к исполняемому скрипту; Flags оставим пустым, т.к. 
мы не будем открывать ни сайта, ни каких-то страниц; 
TargetFrameName также пуст; заголовки для пакета оставляем пустым, 
т.к компонента сама их заполнит и МТС не требует никакой верификации 
(как билайн, например). Конечным действием вызываем процедуру 
Navigate2 и отправляем сообщение. Описывать как заполнять поля 
время/дата не буду, т.к это очень просто. 
 
P.S: Также стоит заметить, что разные операторы используют 
разные методы отправки (GET или POST). В нашем примере 
мы использовали метод POST. Если необходимо использовать GET, 
то просто оставьте значение переменной PostData пустым. */
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
18.01.2011, 20:11  [ТС] #3
Спасибо! Надеюсь заработает. Очень хорошо, еще раз спасибо. Только осталось его перевести с Delphi на С++ и все, правда это будет не легко, так как я не когда не работал с Delphi, но все же основа та же. Спасибо еще раз.
0
LK
Заблокирован
18.01.2011, 20:14 #4
там в основном менять := на = и . на -> . пожалуйста .
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
18.01.2011, 20:23  [ТС] #5
LK, Да это ясно . И еще Begin-end на {} .
1
LK
Заблокирован
18.01.2011, 20:30 #6
да в основном как бы так, в данном коде .
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
18.01.2011, 20:49  [ТС] #7
Только вот произошла одна проблема. Я почти перивел, но не со всеми ошибками смог справится. Вот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
  String strPostData;
  Pointer Data;
  AnsiString URL, Flags, TargetFrameName, PostData;
  OleVariant Headers;
  AnsiString PhoneNumField = "89206676715";
  AnsiString TextField = "Hello";
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 
 
 
 strPostData = "To=" + PhoneNumField +"&Msg="
        + TextField +
         "&Hour=20&Min=40&Day=18&Mon=01&Year=2011";
  PostData = VarArrayCreate(0,strPostData.Length() -1, varByte);
  Data = VarArrayLock(PostData);
  try
  {
    Move(strPostData[1], Data, strPostData.Length());     // Здесь ошибка
 
    VarArrayUnlock(PostData);
  }
  catch(...)
  {
  URL="http://www.mts.ru/cgi-bin/cgi.exe?function=sms_send";
  }
  Flags = EmptyParam;
  TargetFrameName = EmptyParam;
  Headers = EmptyParam; // TWebBrowser ????????????? ????????
                         // ??? ????????? ????????????????
                         // ??????????
  CppWebBrowser1->Navigate2(URL, Flags, TargetFrameName, PostData, Headers); // И здесь :(
}
//---------------------------------------------------------------------------
А вот ошибки
[C++ Error] Unit1.cpp(37): E2034 Cannot convert 'int' to 'const void *'
[C++ Error] Unit1.cpp(37): E2342 Type mismatch in parameter 'Source' (wanted 'const void *', got 'char')
[C++ Error] Unit1.cpp(50): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(50): E2342 Type mismatch in parameter 'URL' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(50): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(50): E2342 Type mismatch in parameter 'Flags' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(50): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(50): E2342 Type mismatch in parameter 'TargetFrameName' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(50): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(50): E2342 Type mismatch in parameter 'PostData' (wanted 'tagVARIANT *', got 'AnsiString')
Прошу помочь.
0
LK
Заблокирован
18.01.2011, 22:30 #8
можно попробовать
C++
1
2
AnsiString s;
Variant v = Variant(s);
Пардон, а Move() , вообще-то, из си ? Это, случаем, судя по синтаксису, не strcpy ?
http://www.delphisources.ru/pages/faq/faq_delphi_basics/Move.php.html
0
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
18.01.2011, 22:53  [ТС] #9
С этим разобрались. Спасибо. А вот с этим что делать?
C++
1
CppWebBrowser1->Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
Вот ошибки

[C++ Error] Unit1.cpp(53): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(53): E2342 Type mismatch in parameter 'URL' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(53): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(53): E2342 Type mismatch in parameter 'Flags' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(53): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(53): E2342 Type mismatch in parameter 'TargetFrameName' (wanted 'tagVARIANT *', got 'AnsiString')
[C++ Error] Unit1.cpp(53): E2034 Cannot convert 'AnsiString' to 'tagVARIANT *'
[C++ Error] Unit1.cpp(53): E2342 Type mismatch in parameter 'PostData' (wanted 'tagVARIANT *', got 'AnsiString')
А в том коде про Move, он ругается на ^
0
LK
Заблокирован
18.01.2011, 23:29 #10
приведение типов не сработало ?
C++
1
2
AnsiString s;
Variant v = Variant(s);
C++
1
А в том коде про Move, он ругается на ^
как ругается ? просто кроет матом, и все ?

Добавлено через 5 минут
Pascal
1
2
3
4
5
6
Operator Operation Operand types Result type Example
+ pointer addition character pointer, integer character pointer P + I
- pointer subtraction character pointer, integer character pointer, integer P - Q
^ pointer dereference pointer base type of pointer P^
= equality pointer Boolean P = Q
<> inequality pointer Boolean P <> Q
0
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
18.01.2011, 23:31  [ТС] #11
Цитата Сообщение от LK Посмотреть сообщение
эх, маладешшшшь...
Пробовал, не надо.

Добавлено через 13 секунд
Не идет
0
LK
Заблокирован
18.01.2011, 23:47 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Let the following variable are defined:
 
      type rec = record ... end;
      var f, g : file of rec;
          r : rec;
// Then translation for the
// following construction will be:
 
    r := f^;
        f^ := r;
        f^ := g^;
 
    ==>
 
      r = *access(f);
      store(f, r);
      scopy(f, g);
//
type
        rec = record
  code : integer;
  name : array [1..10] of char;
        end;
      const
        pi = 3.14;
      var
        f : file of rec;
r : rec;
      begin
        writeln('Hello world');
writeln('pi = ', pi:10:5);
write(f, r);
read(f, r);
r := f^;
f^ := r;
readln;
      end.
 
  ==>
 
      struct rec {
          integer code;
          array<1,10,char> name;
      };
      const real pi = 3.14;
      file f;
      rec r;
 
      main()
      {
        output << "Hello world" << NL;
output << "pi = " << format(pi, 10, 5) << NL;
        f << r;
        f >> r;
        r = *f;
        store(f, r);
input >> NL;
return EXOT_SUCCESS;
     }
Добавлено через 14 минут
Pointer *Data;
1
S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
19.01.2011, 13:53 #13
C++
1
2
3
4
5
6
7
8
9
try
{
  Move(strPostData[1], Data, strPostData.Length());     // Здесь ошибка
  VarArrayUnlock(PostData);
}
catch(...)
{
URL="http://www.mts.ru/cgi-bin/cgi.exe?function=sms_send";
}
Это разве должно работать? Указываешь ведь URL только при ошибке. Или я чего-то не допонимаю?
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
19.01.2011, 14:12  [ТС] #14
S1deX, Мда. Я чего то не посмотрел. Надо учесть . Спасибо.
0
S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
19.01.2011, 14:15 #15
Не за что
Да, и еще. Попробуй поменять
C++
1
2
AnsiString URL, Flags, TargetFrameName, PostData;
OleVariant Headers;
на

C++
1
OleVariant URL, Flags, TargetFrameName, PostData, Headers;
Просто в дельфи примере там OleVariant для них стоит
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
19.01.2011, 14:26  [ТС] #16
Хорошо! . Спасибо!
0
S1deX
22 / 22 / 1
Регистрация: 04.01.2011
Сообщений: 67
19.01.2011, 14:43 #17
Я посмотрел в интернете информацию по POST-запросам.
Вот какой-то код нарыл, подправил его под ваши требования, код компилится, однако не могу проверить, отсылает или нет, т.к. сам с Украины
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
String sPostData;
 sPostData = "To=Номер&Msg=Test&Hour=20&Min=40&Day=18&Mon=01&Year=2011";
 String sURL;
 sURL="http://www.mts.ru/cgi-bin/cgi.exe?function=sms_send";
 
 BSTR bstrHeaders = NULL;
 TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
 LPSAFEARRAY psa;
 LPCTSTR cszPostData = sPostData.c_str();
 UINT cElems = lstrlen(cszPostData);
 LPSTR pPostData;
 LPVARIANT pvPostData;
 
 bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencodedrn");
 if (!bstrHeaders){
  Application->MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
  return;
 }
 
 V_VT(&vHeaders) = VT_BSTR;
 V_BSTR(&vHeaders) = bstrHeaders;
 
 pvPostData = vPostData;
 
 if(pvPostData){
  VariantInit(pvPostData);
 
  psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
  if(!psa){
   return;
  }
 
  SafeArrayAccessData(psa, (LPVOID*)&pPostData);
  memcpy(pPostData, cszPostData, cElems);
  SafeArrayUnaccessData(psa);
  V_VT(pvPostData) = VT_ARRAY | VT_UI1;
  V_ARRAY(pvPostData) = psa;
 }
 CppWebBrowser1->Navigate((TVariant)sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
1
LK
Заблокирован
19.01.2011, 15:29 #18
Ну и еще вышее было, как привести AnsiString к типу Variant .

Добавлено через 33 минуты
Цитата Сообщение от S1deX Посмотреть сообщение
Вот какой-то код нарыл, подправил его под ваши требования, код компилится
- у меня куча ошибок, разбираться лень, если у вас компилится - проектик не покажете ?
1
Vlad_IT
1440 / 346 / 60
Регистрация: 03.04.2010
Сообщений: 2,095
19.01.2011, 15:57  [ТС] #19
Только одна проблема. Сайт MTS кажется сменил адрес отправки сообщения. И еще там посылать можно только абонентам МТС. А здесь можно как нибудь?
Мегафон
0
Sasha
4918 / 2383 / 529
Регистрация: 05.06.2008
Сообщений: 7,465
Записей в блоге: 3
19.01.2011, 16:01 #20
Цитата Сообщение от LK Посмотреть сообщение
Ну и еще вышее было, как привести AnsiString к типу Variant .

Добавлено через 33 минуты
- у меня куча ошибок, разбираться лень, если у вас компилится - проектик не покажете ?
У меня компилиться, только я не знаю что нужно делать на странице MTS
0
19.01.2011, 16:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2011, 16:01
Привет! Вот еще темы с решениями:

Отправить SMS!
Привет парни!) Возникла задача, написать прогу отправки смс) Нашел интересную...

Отправить SMS сообщение
как отправить чез SMSmanager сообщение на телефон с картинкой из Drawable?

Отправить SMS с автонастройками интернета
Во многих операторах мобильных связи есть такие авто-конфигурации интернета....

Возможно ли как-нибудь выгрузить драйвер ?
Ребят возможно ли как-нибудь убить драйвер в системе?Точнее его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru