На этот раз, мы рассмотрим, как можно работать с sms-сообщениями, при помощи библиотеки Skype4Com. Тут все очень просто, очень похоже, как мы работали со звонками. Тут только лишь отличается интерфейсом и типом, который определяет статус отправки сообщения.

Что касается статуса отправки сообщения, то сделаем это тоже быстрым методом, с использованием компонента TTimer.

Проект наш уже имеется, нам необходимо только лишь добавить необходимые компоненты, а понадобятся нам следующие компоненты:

  • TButton
  • TEdit — 2 шт.
  • TMemo

TEdit - для ввода номера телефона, кому мы будем отправлять SMS и от кого, а также необходим TMemo- для ввода текста SMS, ну а по нажатию на TButton мы будем отправлять SMS, на указанный номер.

С проектом, вроде бы, разобрались. Теперь нам необходимо объявить 2-е переменные, одна для работы со статусом, а вторая для отправки sms-сообщения.

Для этого нам потребуется интерфейс — ISmsMessage, а также тип — TSmsMessageStatus, для работы со статусом отправки сообщения. В итоге, у меня получилось следующее:

var
  Sms:ISmsMessage;
  SmsStatus:TSmsMessageStatus;

Создавать и отправлять sms-сообщения, можно и без объявления переменной, ссылки на интерфейс, но сделав это, мы получим полный контроль над каждым sms-сообщением, так что это довольно таки удобно.

Давайте приступим к нашему проекту. На событие OnClick нашей кнопки, по нажатию на которую, мы будем отправлять sms-сообщение, напишем следующий код:

procedure TForm2.Button8Click(Sender: TObject);
var
 idsms:Integer;
begin
   Sms:=CoSmsMessage.Create;
   Sms:=Skype.CreateSms(smsMessageTypeOutgoing,'TNumber');
   idsms:=Sms.Id;
   Sms.Body:='Body sms';
   Sms:=Skype.SendSms('InNumber','TextMessage','OutNumber');
   SmsStatus:=Sms.Status;
   StatusBar1.Panels[1].Text:=Skype.Convert.SmsMessageStatusToText(SmsStatus);
end;

Сначала создаем объект ISmsMessage, после чего, с помощью функции CreateSms, мы создаем наше sms-сообщение, где указываем его тип, а также номер, для которого оно будет создаваться.

После этого, мы получаем идентификатор нашего sms-сообщение , с помощью свойства Body - задаем заголовок сообщению, с помощью функции SendSms - отправляем Sms-сообщение, где указываем номер телефона, кому отправляем, текст сообщения, а также номер телефона, от кого отправляем.

Дальше получаем статус отправки sms-сообщения и конвертируем его в текст, после чего выводим в TStatusBar.

Как видите ничего сложного. Как я и говорил, каждым sms-сообщением можно управлять по-своему, вот пример, как удалить конкретное sms-сообщение:

procedure TForm2.Button8Click(Sender: TObject);
var
 idsms:Integer;
begin
   Skype.Smss.Item[idsms].Delete;
end;

Но все это можно было сделать без создания дополнительных объектов, а использовать объект TSkype. Например:

procedure TForm2.Button8Click(Sender: TObject);
begin
   Skype.CreateSms(smsMessageTypeOutgoing,'TNumber');
   Skype.Smss.Item[0].Body:='body sms';
   Skype.SendSms('InNumber','Text message','OutNumber');
end;

Ну вот и все, как видите ничего сложного нету. Как-то мы рассматривали статью про отправку sms-сообщений, через sms-шлюзы. Так что вот, мы еще один рассмотрели способ отправки sms, но данный способ требует денежных затрат, хотя если у Вас бизнес, который требует отправки sms-сообщений Вашим клиентам, то затраты для Вас будут не существенные, удачи.

Исходник статьи прикладываю, скачать его можно тут


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


Метки: , , , , ,




К записи “Skype API. Библиотека Skype4COM. Работа с sms-сообщениями” оставлено комментариев: 11.

  1. zerdalert:

    Привет Андрей. Не совсем в тему правда, (я просто подходящей статьи не нашел потому пишу в свеженькой). Меня тут одна идея посетила. Задумал попробовать работать с USB. Ну скажем собрать простейшую электрическую цепь «Фонарик» -(батарейка, кнопка, лампочка, провода, USB кабель). Написать программу, которая при нажатии на кнопку фонарика, в программе отобразит лейбл например-»Фонарик включен» и наоборот.

    Много чего перерыл, нигде подходящей инфы нет. На форумах говорят, что под устройство драйвер писать нужно, а на дельфи его не напишешь или рекомендуют различные конвертеры с USB на COM и дальше работать с COM но конкретного по существу нет нигде.

    Для меня эта фишка интересна тем, что это уже не просто голая программка, а работа непосредственно с аппаратной частью, пусть даже с такой малозначимой как фонарик.

    Я видел нечто похожее на сайте у Любаева, но тот все с мышкой и лазерной указкой проделывал. Вот тут: http://delphiexpert.ru/view_lesson.php?id=74

    Ты случайно не знаешь, как такое можно реализовать, ну или в какую сторону рыть?

    • Andrey53:

      если честно, то в данной области я не работал, даже не знаю, что тебе посоветовать

  2. Павел:

    Интересная тема. Надо подумать…

  3. Leonid:

    Delphi7
    Все шло как бы хорошо, но добавляю в исходник статьи

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // Определение пути расположения программы
    Path:=ExtractFilePath(Application.ExeName); // это
    if Path[length(path)]‘\’ then Path:=Path+’\’;
    //
    ActiveX.CoInitialize(nil);
    Skype := SKYPE4COMLib_TLB.TSkype.Create(self);
    Skype.OnAttachmentStatus := SkypeAttachmentStatus;
    Skype.OnAsyncSearchUsersFinished := MyAsyncSearchUsersFinished;
    Position := poScreenCenter;
    Memo1.ScrollBars := ssVertical;
    // Edit1.Text := »;
    Skype.Attach(8, False);
    end;

    стало ругается на строку
    Path:=ExtractFilePath(Application.ExeName);
    Object or class type required

    Не мог понять причину, хотя это всегда и везде работало.
    из-за этих строк
    Skype.OnAttachmentStatus := SkypeAttachmentStatus;
    Skype.OnAsyncSearchUsersFinished := MyAsyncSearchUsersFinished;

    если применить Path:= ExtractFilePath(ParamStr(0)); // путь определяет
    тогда путь определяется.

    Но дальше при вызове
    if Application.MessageBox(‘Вы действительно хотите ‘ +#10+#13+
    ‘выйти из программы?’, ’12345′,
    MB_ICONQUESTION OR MB_YESNO OR MB_DEFBUTTON2)=ID_YES then

    ругается на Application.MessageBox
    пришлось заменить на
    if messageBox(Handle,’Вы действительно хотите выйти из программы?’, ’12345′,
    mb_YesNoCancel or mb_iconquestion)=mrYes then
    begin
    13125645758tfbxfbn
    end
    else

    Но дальше при сворачивании программы в trey ругается на Application.Minimize;
    пришлось заменить на
    // свернуть в трей с приема
    // Если программа запущена
    if FileExists(Path + ’12345_Log.Ini’) then
    //
    // ShowWindow(Handle,SW_MINIMIZE); // сворачивает в форму
    SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); // сворачиваент в трей

    из другого примера
    Application.HookMainWindow(ProcessMessages);

    Object or class type required

    Пожалуста объясните кто знает почему такое происходит,
    и как это побороть ?

  4. Андрей:

    А кто подскажет, как во время активного звонка отправить DTMF-код? В SkypeAPI судя по описанию, такая возможность существует!

  5. Аноним:

    Если не трудно приведите пример отправки смс на моб.телефон на С++
    #import «Skype4COM.dll»
    using namespace SKYPE4COMLib;

    int main() {
    CoInitialize(NULL);
    ISkypePtr pSkype(__uuidof(Skype));
    pSkype->Attach(6,VARIANT_TRUE);
    pSkype->SendSms(«+xxxxxxxxxx»,»Hello!»,»»);

    pSkype = NULL;
    CoUninitialize();
    system(«pause»);
    return 0;
    }
    Звоните на мобильные номера без проблем и отправляет сообщения списку контактов тоже, а смс на моб. не отправляет… А так программа падает.

  6. BoberMod:

    Где взять эти компоненты??
    Зарегал файл dll и ничего компонентво нет(

Оставить комментарий на Андрей

Вы можете использовать следующие теги:

*