Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Шичко Игорь
Статус: Практикант
Рейтинг: 20
∙ повысить рейтинг >>
Лукьяненко Алексей Валериевич
Статус: Студент
Рейтинг: 20
∙ повысить рейтинг >>
Greyss
Статус: 4-й класс
Рейтинг: 20
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1302
от 12.02.2009, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 421, Экспертов: 48
В номере:Вопросов: 2, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 159765: Здравствуйте, уважаемые эксперты. Возможно стоило задать вопрос по теме "теория программирования" но пишу сюда, так как программу пишу именно на Дельфи. Необходимо написать программу работы с СМС. Конкретнее - есть gsm модем, подключенны...


Вопрос № 159789: Доброго времени суток. Необходимо дождаться появления определенного окна чужой программы. Подскажите пожалуйста как лучше организовать ожидание чтобы не использовать sleep и прочие извращения Вот код: <div style="margin:15px; margin-top...

Вопрос № 159.765
Здравствуйте, уважаемые эксперты. Возможно стоило задать вопрос по теме "теория программирования" но пишу сюда, так как программу пишу именно на Дельфи.
Необходимо написать программу работы с СМС. Конкретнее - есть gsm модем, подключенный к сом порту, на который и с которого смс принимаются/отсылаются. Формат команд/ответов есть, т.е. с "верхним" уровнем проблем нет. Но, как известно, компонета "модем" нет ни в одной среде (что конечно вполне естественно). Раньше с подобными задачами не сталкивался (профиль не тот), потому покопал в инете и выяснил, что необходимо писать модуль для работы с сом портом, что я уже сделал, но есть тонкости. Сейчас модуль написан для работы в синхронном режиме с отдельным потоком для чтения и событием, обработчик которого вызывается при получении байта, но и так загрузка процессора составляет 20-25% (опрос ведь также происходит в цикле). Есть функция SetCommMask, которая как нельзя лучше подходит, но она для асинх ронного режима работы. Как здесь мне быть? Использовать эту функцию и работать в асинхронном режиме? (модем то любой работает в синхронном). Просто следить чтобы операции не "перекрывались". Или же есть какие то другие механизмы? Встретилась такая фраза:
"Особенности непосредственной работы с модемами я не буду рассматривать, так как существует большой набор высокоуровневых функций и протоколов, таких как TAPI, специально предназначеных для работы с модемами. Если Вас все же интересует эта тема, то почитайте описания функции GetCommModemStatus, и структур MODEMDEVCAPS и MODEMSETTINGS. В остальном работа с модемом ничем не отличается от работы с обычным портом."
Почитал я про то, что говорит автор слов, но понял - мне это не нужно, соединений я не создаю и т.п. Просто нужно иногда посылать в порт нужную команду, читать ответ и все... В остальном программа просто ждет прихода в порт строки (строка определенного формата посылается в порт модемо м при приходе смс или входящем звонке)...
Конечно я наверное заново изобретаю велосипед - есть множество готовых уже компонентов типа "Сом-порт", но не в моих принципах не знать как и что делает каждая строка кода, да и за стабильность работы программы как я в таком случае могу отвечать?
Заранее огоромное СПАСИБО!!!
Отправлен: 06.02.2009, 14:07
Вопрос задал: Ленар М. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Armad
Здравствуйте, Ленар М.!
Вопрос обширен, поэтому, следующее верно - Возможно, стоило задать вопрос по теме "теория программирования"
Cледующее так же верно - необходимо писать модуль для работы с сом портом
Именно в эту сторону нужно смотреть - ...режиме с отдельным потоком... (добавлю - режимах)
Абсолютно верное упоминание - Встретилась такая фраза:
"Особенности непосредственной работы с модемами я не буду рассматривать, так как существует большой набор высокоуровневых функций и протоколов, таких как TAPI, специально предназначеных для работы с модемами. Если Вас все же интересует эта тема, то почитайте описания функции GetCommModemStatus, и структур MODEMDEVCAPS и MODEMSETTINGS. В остальном работа с модемом ничем не отличается от работы с обычным портом."
А вот тут Вы не правы - мне это не нужно, соединений я не создаю и т.п. Просто нужно иногда посылать в порт нужную команду, читать ответ и все...
Это лишь часть реализации работы с C OM портом, однако для полноценной работы (что теряется за Вашим - я всего лишь делаю то-то и то-то... ) необходима наиболее полная реализация работы протокола.
Вот это мне особенно по душе - Конечно я наверное заново изобретаю велосипед - есть множество готовых уже компонентов типа "Сом-порт", но не в моих принципах не знать как и что делает каждая строка кода, да и за стабильность работы программы как я в таком случае могу отвечать?

В этом случае не поленитесь изучить код открытых компонентов для работы с COM портом. Тема весьма обширна, а Вы , насколько я понял хотите готового решения, причем себе же и противореча.
В плане ответа на Ваш вопрос. В свое время я реализовывал похожую задачу по коммуникации рабочей станции и терминала с грузовыми весами, там тоже обмен данными шел весьма своеобразно и по COM порту.
Так вот я воспользовался советами с http://www.delphimaster.ru/ и чтением примеров из DelphiWorld - http://delphiworld.narod.ru/
Поверьт е мне, там есть ответы на Ваш вопрос. Стоит лишь внимательно прочитать. Если же у Вас все таки останутся вопросы, не стесняйтесь пишите мне на почту (не совсем уверен что могу оставить адрес, но думаю поправят, если не прав - на roobeeaz@rambler.ru (по моему исходники еще лежат где-то на HDD))
Ответ отправил: Armad (статус: 3-й класс)
Ответ отправлен: 06.02.2009, 15:50

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 243031 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 159.789
    Доброго времени суток. Необходимо дождаться появления определенного окна чужой программы. Подскажите пожалуйста как лучше организовать ожидание чтобы не использовать sleep и прочие извращения

    Вот код:

    Код:
    var
    Security_handle, Edit_handle, Button1_handle, Conn_info_handle, Success_handle : HWND;
    ip, success:pchar;

    begin
    ip:=pchar('Radmin security: '+Edit1.Text);
    success:=pchar(Edit1.Text+' - Telnet');
    Security_handle := FindWindow (nil, ip);
    If Security_handle <> 0 then begin
    Edit_handle := FindWindowEx(Security_handle, 0, 'Edit', '');
    SendMessage(Edit_handle, WM_SETTEXT, 0, Integer(PChar('password')));
    Button1_handle := FindWindowEx(Security_handle, 0, 'Button&# 39;, 'OK');
    SendMessage(Button1_handle, BM_CLICK, 0, 0);

    Sleep(5000); //!!!!

    Conn_info_handle:=FindWindow (nil, 'Connection info');
    Success_handle:=FindWindow (nil, success);
    if (Conn_info_handle <> 0) and (Success_handle=0) then begin
    PostMessage(Conn_info_handle,WM_QUIT,0,0)
    end
    else begin
    ShowMessage('GoodPass');


    Описание:

    Собственно ищет имеется ли окно "Radmin security: + данные из Edit1", если найдено, тогда передает сообщение в Edit этого окна и нажимает на кнопку. После нажатия на кнопку должно появиться окно с заголовком вида "Connection info", время от нажатия на кнопку до появления окна, естественно, каждый раз разное. Поэтому я всунул туда максимальный sleep который возможен, но хотелось бы этого избежать. Помогите примером, буду очень благодарен!
    Отправлен: 06.02.2009, 19:25
    Вопрос задал: Segey (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Mixala
    Здравствуйте, Segey!
    Если я правильно понял, то необходимо после отсылки сообщения одному окну дождаться появления другого. Можно использовать просто цикл
    repeat
    Conn_info_handle:=FindWindow(nil,'Connection info');
    until (conn_info_handle<>0); //если окно найдено, программа идет дальше, если нет, то ищет заново

    это вместо sleep. Таким образом программа будет проверять нет ли нужного окна, а когда наконец оно появиться, пойдет дальше.
    Ответ отправил: Mixala (статус: 4-й класс)
    Ответ отправлен: 06.02.2009, 22:59

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 243067 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное