安靜的做ADSL or RAS 網路連線測試(免用網址測試方式) |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
,Registry, StdCtrls;
const
cERROR_BUFFER_TOO_SMALL = 603;
cRAS_MaxEntryName = 256;
cRAS_MaxDeviceName = 128;
cRAS_MaxDeviceType = 16; type
TConnectionType = (ctNone, ctProxy, ctDialup); type
ERasError = class(Exception);
HRASConn = DWord; PRASConn = ^TRASConn;
TRASConn = record dwSize: DWORD;
rasConn: HRASConn;
szEntryName: Array[0..cRAS_MaxEntryName] Of Char;
szDeviceType : Array[0..cRAS_MaxDeviceType] Of Char;
szDeviceName : Array [0..cRAS_MaxDeviceName] of char;
end;
TRasEnumConnections = function (RASConn: PrasConn;
var BufSize: DWord;
var Connections: DWord): LongInt;stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
function ConnectedToInternet : TConnectionType;
function RasConnectionCount : Integer; implementation {$R *.DFM}
function ConnectedToInternet: TConnectionType;
var Reg : TRegistry; bUseProxy : Boolean; UseProxy : LongWord;
begin
Result := ctNone;
Reg := TRegistry.Create;
with REG do try try RootKey := HKEY_CURRENT_USER;
if OpenKey('Software\Microsoft\WindowsCurrentVersion\Internet settings',False) then begin if GetDataType('ProxyEnable') = rdBinary then ReadBinaryData('ProxyEnable', UseProxy, SizeOf(LongWord) ) else begin bUseProxy := ReadBool('ProxyEnable'); if bUseProxy then UseProxy := 1 else UseProxy := 0;
end; end;
except end;
finally Free;
end;
if Result = ctNone
then
begin
if RasConnectionCount > 0 then Result := ctDialup;
end; end; function RasConnectionCount : Integer;var RasDLL : HInst; Conns : Array[1..4] of TRasConn; RasEnums : TRasEnumConnections; BufSize : DWord; NumConns : DWord; RasResult : Longint;
begin
Result := 0;
RasDLL := LoadLibrary('rasapi32.dll');
if RasDLL = 0 then exit; try RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
if @RasEnums = nil then raise ERasError.Create('RasEnumConnectionsA not found in rasapi32.dll');
Conns[1].dwSize := Sizeof (Conns[1]);
BufSize := SizeOf(Conns);
RasResult := RasEnums(@Conns, BufSize, NumConns);
If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns; finally FreeLibrary(RasDLL);
end;
end; procedure TForm1.Button1Click(Sender: TObject);
var Status : TConnectionType;
begin
Status:=ConnectedToInternet;
if Status=ctDialup then
label1.caption:='連線中';
if Status=ctNone then
label1.caption:='未連線';
end; end. 因為你!再大的難題,更顯得容易!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
另一個例子:(請試試看) USES
WinInet;
..
..
function InternetConnected: Boolean;
CONST
INTERNET_CONNECTION_MODEM = 1; // local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_LAN = 2; // local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_PROXY = 4; // local system uses a proxy server to connect to the Internet.
INTERNET_CONNECTION_MODEM_BUSY = 8; // local system's modem is busy with a non-Internet connection.
VAR
dwConnectionTypes : DWORD;
BEGIN
dwConnectionTypes :=
INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@dwConnectionTypes,0);
END; 因為你!再大的難題,更顯得容易!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
測試結果如下 :
本機->Hubs->Router->Internet : 連線中 拔掉 Hubs->Router 的接線 (本機->Hubs) : 連線中 拔掉 本機->Hubs 的接線 (單本機): 連線中 重新開機 (單本機) : 未連線 插入 本機->Hubs 的接線 (本機->Hubs) : 未連線 幾秒後再試 (本機->Hubs) : 程式死掉 重新開機 (本機->Hubs) : 連線中 插入 Hubs->Router 的接線 (本機->Hubs->Router->Internet) : 連線中 結果不大穩定而且連到 Hubs 沒連 Internet 也顯示 連線中 其實我以前花了不少時間在網上找免網址測 internet connection 的方法,但是所有人都說是不可能完善的,因為電網只能辦認你有接上 TCP/IP 網路但不能分辦這只是一個私人的網路還是有轉接地接上 internet ,除非用一個你確定在 internet 彼方的網址來測試。 對於在家使用單機的人來說,接上了 TCP/IP 網路就等於接上了 internet 所以可以用這類方式。 很多人說不可能不一定就是不可能,所以我還是努力的測試你的作品,希望你能化不可能為可能
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |