Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как програмно узнать есть ли коннект с интернетом.? [D6, 2000, XP]


Officeman ©   (2006-02-04 13:17:00) 

Написал программу. Теперь надо чтоб при запуске программа открывала
URL адрес. но с учётом проверки соединения с интернет. т.е. если соединения есть или такой адрес найден(есть ответ), тогда открываем окно броузера. иначе не открываем.

нашёл похожую тему
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1138956468&n=4
но практически ничего не понял.

Объясните как сделать проще. Пожалуйста.


Officeman   (2006-02-05 02:56:00) [1]

я сразу разобрался.  спасибо за помощь. модуль отлично работает. =)

p.s. я не чайник. просто немного рассеяный.

тут анекдот вспомнил:

Купил книгу "С++ для чайников", оказалось что надо ещё купить "С++ для идиотов."

=)))))))))))))


HITMAN   (2006-02-04 21:58:00) [2]

implementation

uses WinInet;

{$R *.dfm}


помойму ещё надо вставить WinInet

или поищи нужное тут:
(это пример с моего проэкта, поэтому толком непомню)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
 IdMessageClient, IdSMTP, StdCtrls, idMessage, ComCtrls, ExtCtrls, XPMan,
 Buttons, ImgList, Gauges, IdPOP3, SHELLAPI, Menus, ActiveX, MSHTML,
 OleCtrls, SHDocVw, FileCtrl;


Officeman   (2006-02-04 20:30:00) [3]

to HITMAN, большое - человеческое спасибо!!


HITMAN   (2006-02-04 20:11:00) [4]

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


буттон1.клик

  if IsConnectedToInternet then
   begin
    Timer1.Enabled:=false;
    StartMessageLoad();
   end;


Officeman   (2006-02-04 19:04:00) [5]

никто не знает или вопрос не ясен? подскажите кто знает. плиз плиз плиз...


Officeman   (2006-02-04 15:11:00) [6]

в коде примера не сказано как отловить ошибку когда не пингуется адрес
=((  если кто знает привидите пример пожалуйста.


Gero   (2006-02-04 14:50:00) [7]

> там много событий немогу понять какие относятся к этой ошибке

ICMP.Ping;


Officeman   (2006-02-04 14:43:00) [8]

напиши кусок кода как ты себе это представляешь! там много событий немогу понять какие относятся к этой ошибке. ошибка типа

# Socet Error 11004


Gero   (2006-02-04 14:26:00) [9]

> программа выдаёт ошибку. надо сделать так чтобы ошибку невыдавало.

try
except


Gero   (2006-02-04 14:25:00) [10]

> я открываю ссылки так обычно.
> ShellExecute(0, '', ' http://......', '', '', SW_SHOW);
> каким образом можно сделать обработку проверки. если адрес
> не найден?

В общем случае никаким.


Officeman   (2006-02-04 14:17:00) [11]

нашёл пример работы компоненты    IdICMPClient

вот он.:  помылаешь адрес хоста. и пингуешь. получаешь в Memo результаты каждый интервал 1000.



unit Main;

interface

uses
 {$IFDEF Linux}
 QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls,
 {$ELSE}
 windows, messages, graphics, controls, forms, dialogs, stdctrls, extctrls,
 {$ENDIF}
 SysUtils, Classes, IdIcmpClient, IdBaseComponent, IdComponent, IdRawBase, IdRawClient;

type
 TfrmPing = class(TForm)
 lstReplies: TListBox;
 ICMP: TIdIcmpClient;
 Panel1: TPanel;
 btnPing: TButton;
 edtHost: TEdit;
 procedure btnPingClick(Sender: TObject);
 procedure ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
 private
 public
 end;

var
 frmPing: TfrmPing;

implementation
{$IFDEF MSWINDOWS}{$R *.dfm}{$ELSE}{$R *.xfm}{$ENDIF}

procedure TfrmPing.btnPingClick(Sender: TObject);
var
 i: integer;
begin
 ICMP.OnReply := ICMPReply;
 ICMP.ReceiveTimeout := 1000;
 btnPing.Enabled := False; try
 ICMP.Host := edtHost.Text;
 for i := 1 to 4 do begin
 ICMP.Ping;
 Application.ProcessMessages;
 //Sleep(1000);
 end;
 finally btnPing.Enabled := True; end;
end;

procedure TfrmPing.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
 sTime: string;
begin
 // TODO: check for error on ping reply (ReplyStatus.MsgType?)
 if (ReplyStatus.MsRoundTripTime = 0) then
 sTime := '<1'
 else
 sTime := '=';

 lstReplies.Items.Add(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',
 [ReplyStatus.BytesReceived,
 ReplyStatus.FromIpAddress,
 ReplyStatus.SequenceId,
 ReplyStatus.TimeToLive,
 sTime,
 ReplyStatus.MsRoundTripTime]));
end;



=) немогу сообразить.
когда при работе программы ХОСТИНГ не обнаруживается. программа выдаёт ошибку. надо сделать так чтобы ошибку невыдавало.


Officeman   (2006-02-04 14:11:00) [12]

=)) ступил. уже разобрался с IP =))


Officeman   (2006-02-04 14:03:00) [13]

в  IdICMPClient  надо задавать HOST  в виде IP адреса.
как узнать IP адрес =)) например адрес такой   http://stalkerz.info


DrPass   (2006-02-04 13:35:00) [14]

Проверить связь можно обычным пингом, например, с помощью компоненты IdICMP


Officeman   (2006-02-04 13:31:00) [15]

после запуска программы, открывается окно броузера в котором загружается
html(или другая) страничка  с  баннерами. в слущае если такой адрес найден.

>Просто запрашивай ресурс и обрабатывай ошибку.
Это можно сделать если будет использоватся компонент TWebBrowser?
или это можно сделать без использованяи компонента?

я открываю ссылки так обычно.
ShellExecute(0, '', ' http://......', '', '', SW_SHOW);
каким образом можно сделать обработку проверки. если адрес не найден?

программой будет пользоватся примерно 100 разных человек ежедневно.
Хочу чтоб прога пользу приносила.


Anatoly Podgoretsky   (2006-02-04 13:21:00) [16]

Что такое соединение с Интернет и зачем оно тебе нужно?
Просто запрашивай ресурс и обрабатывай ошибку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо