Лидеры рейтинга

ID: 401284

Михаил Александров

Советник

377

Россия, Санкт-Петербург


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

358

Россия, пос. Теплоозёрск, ЕАО


ID: 401888

puporev

Профессор

215

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

126


ID: 400669

epimkin

Профессионал

111


ID: 242862

Hunter7007

Мастер-Эксперт

29

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

25

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-20 21:46:11-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 160344

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Berkut55
Дата: 12.02.2009, 23:20 Консультация закрыта
Поступило ответов: 1

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

Ответ # 243668 от Евгений/Genia007/
Здравствуйте, 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.

Евгений/Genia007/

Профессионал
15.02.2009, 12:04
Мини-форум консультации # 160344
Железнов Александр Николаевич

1

= общий =    15.02.2009, 00:17

Круто, никто ответить не соизволил...

q_id

Евгений/Genia007/

Профессионал

ID: 153662

2

= общий =    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

q_id

Евгений/Genia007/

Профессионал

ID: 153662

3

= общий =    15.02.2009, 14:44

Скачать напрямую Ras.pas можно URL >> отсюда.

=====
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

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

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

puporev

Профессор

Рейтинг: 215

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 164

Gluck

8-й класс

Рейтинг: 60

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0