На этот раз, мы рассмотрим, как можно работать с 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-сообщений Вашим клиентам, то затраты для Вас будут не существенные, удачи.
Исходник статьи прикладываю, скачать его можно тут
Хочу заметить, что в Москве, есть фирмы, которые предоставляют очень качественные услуги по грузовое такси. Сейчас в Москве огромные пробки, но даже это не мешает профессиональным специалистам во время привезти груз к точке. А этим самым Вы экономите свое драгоценное время, так что обращайтесь к самым лучшим специалистам.
Привет Андрей. Не совсем в тему правда, (я просто подходящей статьи не нашел потому пишу в свеженькой). Меня тут одна идея посетила. Задумал попробовать работать с USB. Ну скажем собрать простейшую электрическую цепь «Фонарик» -(батарейка, кнопка, лампочка, провода, USB кабель). Написать программу, которая при нажатии на кнопку фонарика, в программе отобразит лейбл например-»Фонарик включен» и наоборот.
Много чего перерыл, нигде подходящей инфы нет. На форумах говорят, что под устройство драйвер писать нужно, а на дельфи его не напишешь или рекомендуют различные конвертеры с USB на COM и дальше работать с COM но конкретного по существу нет нигде.
Для меня эта фишка интересна тем, что это уже не просто голая программка, а работа непосредственно с аппаратной частью, пусть даже с такой малозначимой как фонарик.
Я видел нечто похожее на сайте у Любаева, но тот все с мышкой и лазерной указкой проделывал. Вот тут: http://delphiexpert.ru/view_lesson.php?id=74
Ты случайно не знаешь, как такое можно реализовать, ну или в какую сторону рыть?
если честно, то в данной области я не работал, даже не знаю, что тебе посоветовать
Интересная тема. Надо подумать…
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
Пожалуста объясните кто знает почему такое происходит,
и как это побороть ?
что-то у Вас не понятное, может пути не правильно прописаны в Delphi к библиотекам
Леонид, вот столкнулся с той же проблемой.. Вы не нашли выход случайно?
А кто подскажет, как во время активного звонка отправить DTMF-код? В SkypeAPI судя по описанию, такая возможность существует!
Если не трудно приведите пример отправки смс на моб.телефон на С++
#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;
}
Звоните на мобильные номера без проблем и отправляет сообщения списку контактов тоже, а смс на моб. не отправляет… А так программа падает.
К сожалению я не знаю С++
Где взять эти компоненты??
Зарегал файл dll и ничего компонентво нет(
компонентов и не должно быть, Вы можете использовать классы библиотеки