Консультация № 160344
12.02.2009, 23:20
0.00 руб.
0 4 1
Здравствуйте!
Нужен код простейшей программы автодозвона.
Программа должна находится в трее и периодически контролировать соединение с интернетом, текущее время и если время находится в промежутке например с 1 до 3 часов, то восстанавливать соединение при обрыве, а если с 3 до 5 то соединение восстанавливать не обязательно.
Внимание, вопрос! Как контролировать соединение, есть оно в данный момент или разорвано.
На словах объяснять не надо, нужны 10 строчек кода.

Обсуждение

Неизвестный
15.02.2009, 00:17
общий
Круто, никто ответить не соизволил...
давно
Профессионал
153662
1070
15.02.2009, 12:04
общий
это ответ
Здравствуйте, Berkut55!
Проверить есть ли активное соединение с Интернетом можно следующим образом
Код:
uses
WinInet;

{...}

function IsConnectedToInternet: Boolean;
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsConnectedToInternet then
ShowMessage('Есть соединение.')
else
ShowMessage('Нет соединения.')
end;



Дозвониться до провайдера можно попробовать так:
Код:
function DialProvider(connection: string): boolean;
// connection - имя учетной записи
var
pars: TRasDialParams;
hRas: ThrasConn;
r: integer;
begin
hRas := 0;
strpcopy(pars.szEntryName, connection); // имя учетной записи
pars.szPhoneNumber := ''; // номеp телефона - по умолчанию
pars.szcallbacknumber := ''; // callback нам не нужен
pars.szUserName := ''; // логин - по умолчанию
pars.szPassWord := ''; // паpоль - по умолчанию
pars.szDomain := ''; // аналогично с домейном
pars.dwSize := Sizeof(TRasDialParams); // вычисляем pазмеp записи
r := rasdial(nil, nil, pars, 0, nil, hRas); // звоним
if r <> 0 then
begin // если что-то неполучилось, то
rasHangUp(hRas); // сбpасываем соединение
result := false; // ф-ция тепеpь веpнет false
end
else
result := true; // а если все ок - то true.
end;


Использовались статьи с сайта Delphi World.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
15.02.2009, 13:03
общий
Для примера с дозвоном, нужен модуль Ras.pas, найти его можно URL >>здесь.

В Win2000 и WinXP можно воспользоваться WinInet:
Для этого добавьте WinInet в секцию uses.
Затем используйте следующую команду:

Код:
InternetAutoDial (INTERNET_AUTODIAL_FORCE_ONLINE, handle); 


handle = родительское окно

или
Код:
uses
WinInet;

// Causes the modem to automatically dial the default Internet connection.
procedure TForm1.Button1Click(Sender: TObject);
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if not InternetGetConnectedState(@dwConnectionTypes, 0) then
// not connected
if not InternetAutodial(INTERNET_AUTODIAL_FORCE_ONLINE or
INTERNET_AUTODIAL_FORCE_UNATTENDED, 0) then
begin
// error
end;
end;


// hangup the default Internet connection.
procedure TForm1.Button2Click(Sender: TObject);
var
dwConnectionTypes: DWORD;
begin
dwConnectionTypes := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if InternetGetConnectedState(@dwConnectionTypes, 0) then
// connected
InternetAutodialHangup(0);
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
15.02.2009, 14:44
общий
Скачать напрямую Ras.pas можно URL >> отсюда.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа