如何在不同的环境(Win98,win2000,win XP)下判断计算机是否接入Internet网? (200分)

V

vsice

Unregistered / Unconfirmed
GUEST, unregistred user!
1.如何判断计算机使用的是什么系统(win 98,win200,还是win xp)?
2.如何在不同的环境(Win98,win2000,win XP)下判断计算机是否接入Internet网?
3.如何判断计算机是通过局域网共享上网,还是直接拨号上网?
谢谢各位!本人使用的一些方法不大对劲,所以向大家学习一下有什么好方法实现,再谢!!
 
判断该机是否连上局域网:
Function Is_onLine;
Begin
if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then
ShowMessage('连上了!') else
ShowMessage('没连上!');
End;
检测计算机是否联上Internet网比较简单的做法可以通过一个
Win32 Internet(WinInet) 函数 InternetCheckConnection来实现;
它的实现是在 %SystemRoot%/System32/wininet.dll 中,Delphi 调用声明在 WinInet.pas 中,
其 API 声明如下:
BOOL InternetCheckConnection(
IN LPCSTR lpszUrl,
IN DWORD dwFlags,
IN DWORD dwReserved
);
Delphi例子:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InternetCheckConnection('http://www.yahoo.com/', 1, 0) then
edit1.text:= 'Connected'
else
edit1.text:= 'Disconnected';
end;

 
得到版本信息:
用API GetVersion ,不过结果被编码了:
Const
cOsUnknown : Integer = -1;
cOsWin95 : Integer = 0;
cOsWin98 : Integer = 1;
cOsWin98SE : Integer = 2;
cOsWinME : Integer = 3;
cOsWinNT : Integer = 4;
cOsWin2000 : Integer = 5;
cOsWhistler : Integer = 6;
Type
TGetVer = record
WinVer,
WinRev,
DosRev,
DosVer: Byte;
end;
const
VerStr = '%d.%d';
procedure TForm1.Button1Click(Sender: TObject);
var
AllVersions: TGetVer;
begin
AllVersions := TGetVer(GetVersion);
Edit1.Text := Format(VerStr, [AllVersions.WinVer, AllVersions.WinRev]);
Edit2.Text := Format(VerStr, [AllVersions.DOSVer, AllVersions.DOSRev]);
end;
注:返回的版本和真实版本未必相同;
Note2: Win32应用程序需要用GetVersionEx

{$IFDEF WIN32}
function GetVersionEx(lpOs : pointer) : BOOL; stdcall;
external 'kernel32' name 'GetVersionExA';
{$ENDIF}

procedure GetWindowsVersion(var Major : integer;
var Minor : integer);
var
{$IFDEF WIN32}
lpOS, lpOS2 : POsVersionInfo;
{$ELSE}
l : longint;
{$ENDIF}
begin
{$IFDEF WIN32}
GetMem(lpOS, SizeOf(TOsVersionInfo));
lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
while getVersionEx(lpOS) = false do begin
GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1);
lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1;
FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
lpOS := lpOs2;
end;
Major := lpOs^.dwMajorVersion;
Minor := lpOs^.dwMinorVersion;
FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
{$ELSE}
l := GetVersion;
Major := LoByte(LoWord(l));
Minor := HiByte(LoWord(l));
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Major : integer;
Minor : integer;
begin
GetWindowsVersion(Major, Minor);
Memo1.Lines.Add(IntToStr(Major));
Memo1.Lines.Add(IntToStr(Minor));
end;



--------------------------------------------------------------------------------
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
ShowMessage('win9x');
if Win32Platform = VER_PLATFORM_WIN32_NT then
ShowMessage('winNT');

procedure TForm1.Button1Click(Sender: TObject);
var
OS : TOSVersionInfo;
begin
OS.dwOSVersionInfoSize := sizeof(OS);
GetVersionEx(OS);
with OS do
case dwPlatformId of
VER_PLATFORM_WIN32s :
label1.caption := 'Windows 3.1x/32s';
VER_PLATFORM_WIN32_WINDOWS :
Begin
if (dwMajorVersion = 4) and (dwMinorVersion > 0) then
label1.caption := 'Windows 98'
else
label1.caption := 'Windows 95';
end;
VER_PLATFORM_WIN32_NT :
label1.caption := 'Windows NT' ;
end;
end;



--------------------------------------------------------------------------------
Function GetOSVersion : Integer;
Function GetOSName( OSCode : Integer ) : String;
Function GetOSVersion : Integer;
Var
osVerInfo : TOSVersionInfo;
majorVer, minorVer : Integer;
Begin
Result := cOsUnknown;
osVerInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
If ( GetVersionEx( osVerInfo ) ) Then Begin
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
Case ( osVerInfo.dwPlatformId ) Of
VER_PLATFORM_WIN32_NT : { Windows NT/2000 }
Begin
If ( majorVer <= 4 ) Then
Result := cOsWinNT
Else
If ( ( majorVer = 5 ) And ( minorVer= 0 ) ) Then
Result := cOsWin2000
Else
If ( ( majorVer = 5) And ( minorVer = 1 ) ) Then
Result := cOsWhistler
Else
Result := cOsUnknown;
End;
VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME }
Begin
If ( ( majorVer = 4 ) And ( minorVer = 0 ) ) Then
Result := cOsWin95
Else If ( ( majorVer = 4 ) And ( minorVer = 10 ) ) Then Begin
If ( osVerInfo.szCSDVersion[ 1 ] = 'A' ) Then
Result := cOsWin98SE
Else
Result := cOsWin98;
End Else If ( ( majorVer = 4) And ( minorVer = 90 ) ) Then
Result := cOsWinME
Else
Result := cOsUnknown;
End;
Else
Result := cOsUnknown;
End;
End Else
Result := cOsUnknown;
End;


Function GetOSName( OSCode : Integer ) : String;

Begin

If ( OSCode = cOsUnknown ) Then

Result := '(sconosciuto)'

Else If ( OSCode = cOsWin95 ) Then

Result := 'Microsoft Windows 95'

Else If ( OSCode = cOsWin98 ) Then

Result := 'Microsoft Windows 98'

Else If ( OSCode = cOsWin98SE ) Then

Result := 'Microsoft Windows 98 Second Edition'

Else If ( OSCode = cOsWinME ) Then

Result := 'Microsoft Windows Millennium Edition'

Else If ( OSCode = cOsWinNT ) Then

Result := 'Microsoft Windows New Technology'

Else If ( OSCode = cOsWin2000 ) Then

Result := 'Microsoft Windows 2000 / NT 5'

Else

Result := 'Microsoft Windows';

End;
 
晚了一步, 看msdn wininet api吧, 足够了。 呵呵
 

if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then
ShowMessage('连上了!') else
ShowMessage('没连上!');
在Win2000下测试,这种方式检测是否连接局域网不正确。
 
判断计算机上网类型:
uses wininet;

Function ConnectionKind :boolean;
var
flags: dword;
begin
Result := InternetGetConnectedState(@flags, 0);
if Result then
begin
if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then
begin
showmessage('Modem上网');
end;
if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then
begin
showmessage('局域网上网');
end;
if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then
begin
showmessage('通过代理服务器上网!');
end;

if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUSY then
begin
showmessage('网络繁忙,请稍候再试!');
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectionKind;
end;
 
楼上的都测试好使了么?
 
先试,马上结贴
 
试过了没有,可以给分了吧!!!!
 
上网判断还不能达到我要的效果,不知什么原因.其它还可以.结贴啦!
上次结了,没成功.再结!
 
顶部