PDA

View Full Version : تشخیص اتصال به اینترنت



fouladgar
پنج شنبه 06 خرداد 1389, 12:12 عصر
چطور میشه کدی نوشت که زمانی که سیستم به اینترنت وصل میشه( چه LAN و یاdialup) برنامه متوجه بشه؟
البته می تونم اتصال به اینترنت را چک کنم و لی می خوام اگر ممکنه از message های ویندوز استفاده کنم تا به محص اتصال برنامه با خبر بشه

hamid-nic
پنج شنبه 06 خرداد 1389, 22:16 عصر
سلام
شاید این کد به دردتون بخوره .
procedure TForm1.Button1Click(Sender: TObject) ;

function FuncAvail(_dllname, _funcname: string;
var _p: pointer): boolean;
{return True if _funcname exists in _dllname}
var _lib: tHandle;
begin
Result := false;
if LoadLibrary(PChar(_dllname)) = 0 then exit;
_lib := GetModuleHandle(PChar(_dllname)) ;
if _lib <> 0 then begin
_p := GetProcAddress(_lib, PChar(_funcname)) ;
if _p <> NIL then Result := true;
end;
end;

{
Call SHELL32.DLL for Win < Win98
otherwise call URL.dll
}
{button code:}
var
InetIsOffline : function(dwFlags: DWORD):
BOOL; stdcall;
begin
if FuncAvail('URL.DLL', 'InetIsOffline',
@InetIsOffline) then
if InetIsOffLine(0) = true
then ShowMessage('Not connected')
else ShowMessage('Connected!') ;
end;
منبع (http://barnamenevis.org/forum/showpost.php?p=472160&postcount=163)
موفق باشید .

tdkhakpur
جمعه 07 خرداد 1389, 00:08 صبح
خب از تب client جزء Echo را داخل فرمتان استفاده کنید و داخل کد تایمر میتوانید و با ارسال یک پیغام به سروری خاص از این موضوع اطلاع پیدا کنید.(البته از ورود مجددها هم جلوگیری کنید.)

mehrpars
شنبه 08 خرداد 1389, 02:05 صبح
ممکنه اینترنت شما وصل باشه ولی data نداشته باشین
این یک تابع با indy هست که یک هاست رو پینگ میکنه





function CheckServerConnection(HostName:string): boolean;
var RES:Boolean;
begin
IdIcmpClient1.Host:=HostName;
IdIcmpClient1.Ping();
if IdIcmpClient1.ReplyStatus.BytesReceived > 0 then
RES:=True
else
RES:=false;
Result:=RES;
end;

sh4mid
شنبه 08 خرداد 1389, 02:28 صبح
سلام
والا تو C میشه از Code زیر استفاده کرد(من Delphi بلد نیستم)



BOOL BSuccess;
DWORD DWFlags;
BSuccess = InternetGetConnectedState( &DWFlags, 0 );
if ( !BSuccess )
{
AfxMessageBox( "No Internet connection detected!", MB_OK | MB_ICONINFORMATION );
}
else
{
if ( ( DWFlags & INTERNET_CONNECTION_LAN ) == INTERNET_CONNECTION_LAN )
{
AfxMessageBox( "Lan connection is present.", MB_OK );
} if ( ( DWFlags & INTERNET_CONNECTION_MODEM ) == INTERNET_CONNECTION_MODEM )
{
AfxMessageBox( "Modem connection is present.", MB_OK );
}
}
توضیحات بیشتر
http://msdn.microsoft.com/en-us/library/aa384702%28VS.85%29.aspx

Mahmood_M
شنبه 08 خرداد 1389, 03:06 صبح
سلام
والا تو C میشه از Code زیر استفاده کرد(من Delphi بلد نیستم)
گرچه نباید این پست رو در این بخش می زدید ! ولی تابع InternetGetConnectionState که در کدتون هست ، یک تابع API هست که وضعیت اتصال به اینترنت و شبکه یا پرکسی رو مشخص می کنه اما در برخی موارد مثل شبکه ها یا اتصالات DSL ( مثلا مودم های ADSL ) درست جواب نمیده ... !
یک راه تقریبا کامل برای تشخیص اتصال به اینترنت اینه که همراه با چک کردن وضعیت شبکه و مودم با همون تابع ، به چند سایت هم Ping کنید تا از اتصال یا عدم اتصال اطمینان حاصل کنید ، مثلا تابع زیر این کار رو انجام میده :

const
FLAG_ICC_FORCE_CONNECTION = $0001;
INTERNET_CONNECTION_OFFLINE = $0020;
INTERNET_PING_SITES : Array [0..2] of PChar = ('http://www.google.com',
'http://www.microsoft.com',
'http://www.DelphiPlus.com');

implementation

{$R *.dfm}

function GetConnectedState : Boolean;
var
dwFlags, dwSize : DWORD;
begin
Result := InternetGetConnectedState(@dwFlags, 0);
Result := Result and ((dwFlags and INTERNET_CONNECTION_OFFLINE) = 0);
if not Result then
begin
dwSize := SizeOf(dwFlags);
Result := InternetQueryOption(nil, INTERNET_OPTION_CONNECTED_STATE, @dwFlags, dwSize);
Result := Result and ((dwFlags and INTERNET_STATE_CONNECTED) > 0);
if Result then
begin
for dwFlags := Low(INTERNET_PING_SITES) to High(INTERNET_PING_SITES) do
begin
Result := InternetCheckConnection(INTERNET_PING_SITES[dwFlags], FLAG_ICC_FORCE_CONNECTION, 0);
if Result then
Break;
end;
end;
end;
end;

توجه کنید که در قسمت تعرفی ثابتها برای سایتهایی که برای Ping کردن در نظر گرفته شدن می تونید آدرس دلخواه خودتون رو بدید یا تعدادشون رو تغییر بدید ...
نحوه ی استفادش هم که مشخص هست :
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if GetConnectedState then
begin
ShowMessage('Connected to the Internet');
end;
end;
نکته ی آخر اینکه برای استفاده از این تابع باید یونیت WinInet رو به قسمت Uses اضافه کنید ...

موفق باشید ...

fouladgar
یک شنبه 09 خرداد 1389, 11:38 صبح
ممنون از همگی
ولی من نمی خوام برنامه دائم متصل بودن به اینترنت را چک کنه بلکه به محض اتصال با خبر بشه
مثل آنتی ویروسها که به محض اتصال به اینترنت داده ها را چک می کنه

Felony
یک شنبه 09 خرداد 1389, 12:34 عصر
ممنون از همگی
ولی من نمی خوام برنامه دائم متصل بودن به اینترنت را چک کنه بلکه به محض اتصال با خبر بشه
مثل آنتی ویروسها که به محض اتصال به اینترنت داده ها را چک می کنه

آنتی ویروس ها پیغام های مربوط به اتصال رو در سطح پائین تری هوک میکنند ، شما هم میتونید این پیغام ها رو پیدا کنید و تو برنامتون هوکش کنید و درصورت اتصال برنامتون خبرتون کنه و ...

pad_kay
یک شنبه 09 خرداد 1389, 13:04 عصر
آنتی ویروس ها پیغام های مربوط به اتصال رو در سطح پائین تری هوک میکنند ، شما هم میتونید این پیغام ها رو پیدا کنید و تو برنامتون هوکش کنید و درصورت اتصال برنامتون خبرتون کنه و ...
با سلام خدمت شما
دوست عزيز اگر امكان داره نمونه كد قرار داده يا نام message ویندوز را بيان كنيد

Felony
یک شنبه 09 خرداد 1389, 15:15 عصر
با سلام خدمت شما
دوست عزيز اگر امكان داره نمونه كد قرار داده يا نام message ویندوز را بيان كنيد

من شیوه کار رو گفتم ، اگر پیغام رو میدونستم میگفتم ، در سایت های خارجی جست و جو کنید .