获取操作系统信息出错(100分)

  • 主题发起人 主题发起人 yingtao_jia
  • 开始时间 开始时间
Y

yingtao_jia

Unregistered / Unconfirmed
GUEST, unregistred user!
[red][:(!]我在网上看到有关于获取操作系统信息,判断所用系统是WIN98还是WINNT的代码,可是我在自己的
的程序里却无法编译通过,提示错误。为什么?[/red]
 
《delphi深度历险》上的说得很简单嘛。
你是不是忘了引用某些单元了?编译信息是什么?
 
给你一段代码,参考吧
用API GetVersion ,不过结果被编码了:
; 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;



--------------------------------------------------------------------------------


; 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;

;

; 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;

;
 
代码如下:我是用在动态改变DNS地址时判断操作系统的
procedure TForm1.SetTCPIPDNSAddresses( sIPs : string );
var
Gerver:OSVERSIONINFO;
Ret:LongBool;
begin
Gerver.dwOSVersionInfoSize:=148;
Ret:=GetVersionEx(Gerver);
if Gerver.dwPlatformId=VER_PLATFORM_WIN32_NT then
;showmessage('Winnt');
// if using Windows NT
SaveStringToRegistry_LOCAL_MACHINE(
'SYSTEM/CurrentControlSet' +
'/Services/Tcpip/Parameters',
'NameServer',
sIPs );

if Gerver.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS then
// if using Windows 95 /98
showmessage('windows98');
SaveStringToRegistry_LOCAL_MACHINE(
'SYSTEM/CurrentControlSet' +
'/Services/VxD/MSTCP',
'NameServer',
sIPs );
end;
 
后退
顶部