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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты данной рассылки

Орловский Дмитрий
Статус: Профессор
Рейтинг: 3425
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2602
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Профессионал
Рейтинг: 1203
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1577
Дата выхода:24.12.2010, 23:00
Администратор рассылки:Калашников О.А. (Руководитель)
Подписчиков / экспертов:273 / 185
Вопросов / ответов:1 / 1

Вопрос № 181464: Здравствуйте, уважаемые эксперты! Обращаюсь к вам с такой вот просьбой. Напишите мне программу(с наглядным интерфейсом(простым)) на Delphi 7 которая выполняет следующую функцию: программа проверяет наличие активного соединения с интернет...



Вопрос № 181464:

Здравствуйте, уважаемые эксперты!

Обращаюсь к вам с такой вот просьбой.
Напишите мне программу(с наглядным интерфейсом(простым)) на Delphi 7 которая выполняет следующую функцию:
программа проверяет наличие активного соединения с интернетом и если оно не активно, то программа включает интернет.

Ситуация такая. У меня интернет. Стандартные провода от хаба. Но он непостоянен....тоисть он может если я включаю utorrent выключиться или поработать какое то время и снова выключиться. Постоянно передключаться не хочется(НАДОЕЛО)....Хочется чтобы за меня это делала программа. Сам лично не имею представления какие проверки писать и какие функции/процедуры использовать. Стандартная функция не работает(переподключения при разрыве связи) почему то.

Кратко о системе:
Win Vista Home Premium 32разрядная

Оформите ответ как архив с программой в которой есть исходники для самостоятельного разбора и возможной модернизации.

Заранее спасибо.

Е ще буду признателен если натолкнете на литературу для подобных программ. Я так думаю тут все через модуль WINApi

Отправлен: 19.12.2010, 22:30
Вопрос задал: Юдин Евгений Сергеевич (6-й класс)
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/Genia007/ (Профессионал) :
Здравствуйте, Юдин Евгений Сергеевич!
Могу предложить свой вариант решения. Для подключения к интернету использую консольную команду rasdial:
выполняет автоматический набор номера для клиентов Microsoft. Команда rasdial, запущенная без параметров, показывает состояние текущих подключений.
Синтаксис

rasdial имя_подключения [имя_пользователя [{пароль|*}]] [/domain:домен] [/phone:номер_телефона] [/callback:номер_для_ответного_вызова] [/phonebook:путь_к_телефонной_книге] [/prefixsuffix]

rasdial [имя_подключения] /disconnect
Параметры
имя_подключения Требуется при подключении к записи телефонной книги (.pbk). Задает запись текущего файла .pbk из корневой_папки_системы\System32\Ras. Если имя_подключения содержит пробелы, его следует заключать в кавычки (т. е. "имя_подключения").

Файл Rasphone.pbk используется по умолчанию, если не задана Личная_телефонная_книга. Если она задана, используется файл имя_пользователя.pbk. Имя выводится в заголовке окна Rasphone при задании личной телефонной книги. В случае конфликта имен происходит добавление цифр.
имя_пользователя [{пароль|*}] Задает имя пользователя и пароль для подключения. Если используется символ звездочки, пользователю выдается запрос на ввод пароля, но вводимые символы не отображаются. /domain:домен Задает домен, в котором находится учетная запись пользователя. Если этот параметр отсутствует, используется последнее значение поля Домен диалогового окна Подключение к. /phone:номер_телефона Заменяет номер телефона, заданный для телефонного номера данной записи в файле телефонной книги Rasphone.pbk. /callback:номер_для_ответного вызова Заменяет номер телефона для ответного вызова, заданный для записи из файла телефонной книги Rasphone.pbk. /phonebook:путь_к_телефонной_книге Задает путь к файлу телефонной книги. По умолчанию задан системный_корневой_каталог\System32\Ras\имя_пользователя.pbk. Можно указать полный путь к файлу. /prefixsuffix Применяет к набираемому номеру телефона параметры набора номера TAPI для текущего местоположения. Эти параметры настраиваются в телефонной службе с помощью компонента "Параметры телефона и модема", находящегося на панели управления. По умолчанию этот параметр отключен. /disconnect Данный параметр требуется при отключении. Отключает заданное подключение. Отключение также выполняется с помощью ввода параметра /d.

Примечания

* Команда rasdial не поддерживает следующие функции Rasphone.exe:
- Записи, требующие ввода данных в терминальном режиме в процессе набора номера.
- Набор номера через оператора или вручную.

Для определения подключения к интернету функцию InternetGetConnectedState:
содержится в wininet.dll (IE4 / IE5) и показывает состояние подключения к сети локальной системы. Она довольно проста в использовании и возвращает TRUE, если присутствует соединение с интернетом, иначе FALSE.

Так же функция содержит пара метр dwFlags. После вызова функции, dwFlags содержит состояние текущего соединения.

А для пинга функцию InternetCheckConnection:
функция попытается определить доступность сервера, определяемого из URL, который послан функции в качестве параметра, с помощью пинга. Если в вызове функции был установлен флаг $00000001, а в качестве URL был послан NULL, функция проверит не имеется ли входа в серверную базу данных ближайшего сервера. Если такой сервер существует, то функция выполнит пинг этого сервера.

Вот код программы
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Entry: TEdit;
User: TEdit;
P ass: TEdit;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button3: TButton;
Label4: TLabel;
Sait: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses shellapi, WinInet;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); // Запускаем Интернет
var
cmd, param, files, dir: PChar;
begin
// rasdial.exe "имя соеденения" "имя пользователя" "пароль"
cmd:= 'open';
files:= 'rasdial.exe';
param:= PChar('"' + Entry.Text + '"' + ' ' + '"' + User.Text + '"' ; + ' ' + '"' + Pass.Text + '"');
dir:= 'C:';
// вызываем rasdial.exe через Shellexecute
ShellExecute(Self.Handle, cmd, files, param, dir, SW_SHOWMINNOACTIVE);
Timer1.Enabled:= true;
end;

procedure TForm1.Button2Click(Sender: TObject); // Отрубаем Интернет
var
cmd, param, files, dir: PChar;
begin
cmd:= 'open';
files:= 'rasdial.exe';
param:= PChar('"' + Entry.Text + '"' + ' /DISCONNECT');
dir:= 'C:';
ShellExecute(Self.Handle, cmd, files, param, dir, SW_SHOWMINNOACTIVE);
end;

procedure TForm1.Timer1Timer(Sender: TObject); // Проверяем доступность Интернета
var
flag: DWORD;
begin
// Проверяем подключен ли Интернет и дополнительно для подстраховки пинингуем любой сайт, например http://rfpro.ru
if (not InternetGetConnectedState(@flag, 0)) Or (not InternetCheckConnection(PChar(Sa it.Text), $00000001, 0)) then
begin
Timer1.Enabled:= false;
Button1.Click;
Form1.Caption:= 'Интернет не подключен, подключаюсь';
end
else
Form1.Caption:= 'Интернет подключен';
end;

procedure TForm1.Button3Click(Sender: TObject); // Запускаем или тормозим мониторинг доступности Интернета
begin
If Timer1.Enabled then
Timer1.Enabled:= false
else
begin
Timer1.Enabled:= true;
Timer1.OnTimer(Timer1);
end;
end;

end.


, а весь проект в приложении. В поле имя соединения записываем имя своего соединения, которое можно посмотреть если навести курсор на значок в трее, в поле имя пользователя вносим логин для соединения и в поле пароль впечатываем пароль для входа в интернет. Если подключение одно и не требуется постоянно менять пользователя и пароль, то удобнее внести эти данные на этапе разработке программы до компиля ции. Прикрепленный файл: загрузить »

-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/ (Профессионал)
Ответ отправлен: 20.12.2010, 17:43
Номер ответа: 264934

Оценка ответа: 5
Комментарий к оценке:
Отличная работа! 5 баллов!

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


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

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

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

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

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

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

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


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.25 от 13.12.2010

    В избранное