線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5266
推到 Plurk!
推到 Facebook!

如何判斷作業系統

答題得分者是:dllee
eil
一般會員


發表:3
回覆:1
積分:0
註冊:2003-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-26 16:34:50 IP:61.30.xxx.xxx 未訂閱
請問DELPHI要如何判斷是在什麼作業系統下... 有沒有相關的語法??麻煩各位高手解答...謝謝~~~^_________^
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-26 18:53:42 IP:61.231.xxx.xxx 未訂閱
這個問題已經問過很多次囉... 建議您下載離線閱讀包 http://delphi.ktop.com.tw/ktoppack/index.html 善用其內建的搜尋功能,保證受用無窮。    主要可以使用 GetVersionEx 這個 API 來判斷作業系統。 以下幾篇是找到的文章,請參考。    ■ 如何判斷電腦執行的Windows版本?  http://delphi.ktop.com.tw/link.asp?topic_id=18235    ■ 如何判斷電腦執行的Windows版本?  http://delphi.ktop.com.tw/link.asp?topic_id=24977    ■ 如何測知目前使用OS名稱  http://delphi.ktop.com.tw/link.asp?topic_id=37142    ■ 取得系統的資訊...  http://delphi.ktop.com.tw/link.asp?topic_id=23574    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/09/26 19:06:28
------
http://www.ViewMove.com
keny
一般會員


發表:1
回覆:11
積分:2
註冊:2006-08-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-15 15:59:47 IP:211.74.xxx.xxx 訂閱
樓上的大哥,

小弟剛好也有類似需求,
不過,上面那些連結,
似乎早已失連,
有沒有其它的參考資料呢?

感激不盡!
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-15 17:04:01 IP:59.124.xxx.xxx 訂閱
以下程式段提供你參考, 藍色字樣是系統變數。

Result:=osUnknow;
if (Win32Platform=1) then begin
if (Win32MinorVersion=0) then begin
Result:=osWin95;
end else begin
Result:=osWin98;
end;
end else if (Win32Platform=2) then begin
if (Win32MajorVersion=4) then begin
Result:=osWinNT
end else if (Win32MajorVersion=5) then begin
if (Win32MinorVersion=0) then begin
Result:=osWin2K;
end else if (Win32MinorVersion=1) begin
Result:=osWinXP;
end else begin
Result:=osVista;
end;
end;
end;
keny
一般會員


發表:1
回覆:11
積分:2
註冊:2006-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-16 09:17:07 IP:211.74.xxx.xxx 訂閱
感激樓上的大大,

另外, 能否show出OS的序號? (有系統變數可以引出序號嗎?)

謝謝!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-16 11:01:56 IP:210.69.xxx.xxx 訂閱
[發表] 顯示作業系統版本(GetOSVersionDetail.zip)(含Source Code)
http://delphi.ktop.com.tw/board.php?cid=31&fid=77

[發表] 顯示作業系統版本GetOSVersion.zip(含Source Code)
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=86889

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
keny
一般會員


發表:1
回覆:11
積分:2
註冊:2006-08-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-16 11:34:31 IP:211.74.xxx.xxx 訂閱
樓上的大哥,

謝謝你提供更詳細的版本顯示程式來源,

感謝您!


目前想再顯示作業系統的序號, 以供查核,
在Register裡找不到,
最多找到作業系統的ProductID,
但似乎被擾碼或不是序號.
fwy
一般會員


發表:1
回覆:3
積分:0
註冊:2007-02-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-16 16:11:12 IP:202.101.xxx.xxx 訂閱

{************************************************}
{ Function to detect OS Version by Nico Bendlin }
{************************************************}


{$IFDEF CONDITIONALEXPRESSIONS}
{$IF Defined(TOSVersionInfoEx)}
{$DEFINE TOSVERSIONINFOEX_DEFINED}
{$IFEND}
{$ENDIF}
{$IFNDEF TOSVERSIONINFOEX_DEFINED}

type
POSVersionInfoEx = ^TOSVersionInfoEx;
TOSVersionInfoEx = packed record
dwOSVersionInfoSize: DWORD;
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
dwPlatformId : DWORD;
szCSDVersion : array [0..127] of AnsiChar;
wServicePackMajor : Word;
wServicePackMinor : Word;
wSuiteMask : Word;
wProductType : Byte;
wReserved : Byte;
end;

const
VER_SERVER_NT = $80000000;
{$EXTERNALSYM VER_SERVER_NT}
VER_WORKSTATION_NT = $40000000;
{$EXTERNALSYM VER_WORKSTATION_NT}
VER_SUITE_SMALLBUSINESS = $00000001;
{$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
VER_SUITE_ENTERPRISE = $00000002;
{$EXTERNALSYM VER_SUITE_ENTERPRISE}
VER_SUITE_BACKOFFICE = $00000004;
{$EXTERNALSYM VER_SUITE_BACKOFFICE}
VER_SUITE_COMMUNICATIONS = $00000008;
{$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
VER_SUITE_TERMINAL = $00000010;
{$EXTERNALSYM VER_SUITE_TERMINAL}
VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
{$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
VER_SUITE_EMBEDDEDNT = $00000040;
{$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
VER_SUITE_DATACENTER = $00000080;
{$EXTERNALSYM VER_SUITE_DATACENTER}
VER_SUITE_SINGLEUSERTS = $00000100;
{$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
VER_SUITE_PERSONAL = $00000200;
{$EXTERNALSYM VER_SUITE_PERSONAL}
VER_SUITE_BLADE = $00000400;
{$EXTERNALSYM VER_SUITE_BLADE}
VER_SUITE_EMBEDDED_RESTRICTED = $00000800;
{$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
VER_SUITE_SECURITY_APPLIANCE = $00001000;
{$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}

const
VER_NT_WORKSTATION = $0000001;
{$EXTERNALSYM VER_NT_WORKSTATION}
VER_NT_DOMAIN_CONTROLLER = $0000002;
{$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
VER_NT_SERVER = $0000003;
{$EXTERNALSYM VER_NT_SERVER}

{$ENDIF} // TOSVERSIONINFOEX_DEFINED


function GetOSVersionInfo(var Info: TOSVersionInfoEx): Boolean;
begin
FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
if (not Result) then
begin
FillChar(Info, SizeOf(TOSVersionInfoEx), 0);
Info.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
Result := GetVersionEx(TOSVersionInfo(Addr(Info)^));
if (not Result) then
Info.dwOSVersionInfoSize := 0;
end;
end;

function GetOSVersionText: string;
var
Info: TOSVersionInfoEx;
Key: HKEY;
begin
Result := '';
if (not GetOSVersionInfo(Info)) then
Exit;
case Info.dwPlatformId of
{ Win32s }
VER_PLATFORM_WIN32s:
Result := 'Microsoft Win32s';
{ Windows 9x }
VER_PLATFORM_WIN32_WINDOWS:
if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 0) then
begin
Result := 'Microsoft Windows 95';
if (Info.szCSDVersion[1] in ['B', 'C']) then
Result := Result ' OSR2';
end
else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 10)
then
begin
Result := 'Microsoft Windows 98';
if (Info.szCSDVersion[1] = 'A') then
Result := Result ' SE';
end
else if (Info.dwMajorVersion = 4) and (Info.dwMinorVersion = 90)
then
Result := 'Microsoft Windows Millennium Edition';
{ Windows NT }
VER_PLATFORM_WIN32_NT:
begin
{ Version }
if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2) then
Result := 'Microsoft Windows Server 2003'
else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 1)
then
Result := 'Microsoft Windows XP'
else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 0)
then
Result := 'Microsoft Windows 2000'
else
Result := 'Microsoft Windows NT';
{ Extended }
if (Info.dwOSVersionInfoSize >= SizeOf(TOSVersionInfoEx)) then
begin
{ ProductType }
if (Info.wProductType = VER_NT_WORKSTATION) then
begin
if (Info.dwMajorVersion = 4) then
Result := Result #10'Workstation 4.0'
else if(Info.wSuiteMask and VER_SUITE_PERSONAL <> 0) then
Result := Result #10'Home Edition'
else
Result := Result #10'Professional';
end
else if (Info.wProductType = VER_NT_SERVER) then
begin
if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion = 2)
then
begin
if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
Result := Result #10'Datacenter Edition'
else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0)
then
Result := Result #10'Enterprise Edition'
else if (Info.wSuiteMask = VER_SUITE_BLADE) then
Result := Result #10'Web Edition'
else
Result := Result #10'Standard Edition';
end
else if (Info.dwMajorVersion = 5) and (Info.dwMinorVersion
= 0) then
begin
if (Info.wSuiteMask and VER_SUITE_DATACENTER <> 0) then
Result := Result #10'Datacenter Server'
else if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0)
then
Result := Result #10'Advanced Server'
else
Result := Result #10'Server';
end
else
begin
Result := Result #10'Server '
IntToStr(Info.dwMajorVersion) '.'
IntToStr(Info.dwMinorVersion);
if (Info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0) then
Result := Result ', Enterprise Edition';
end;
end;
end;
{ CSDVersion }
if (Info.dwMajorVersion = 4) and
(StrIComp(Info.szCSDVersion, 'Service Pack 6') = 0) and
(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
'SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Hotfix\Q246009', 0,
KEY_QUERY_VALUE, Key) = ERROR_SUCCESS) then
begin
Result := Result #10'Service Pack 6a';
RegCloseKey(Key);
end
else
Result := Result #10 StrPas(Info.szCSDVersion);
Result := Result #10'(Build '
IntToStr(Info.dwBuildNumber and $FFFF) ')';
end;
end;
end;

////////////////////////////////////////////////////////////////////////
////////

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetOSVersionText);
end;
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-02-16 16:46:01 IP:61.219.xxx.xxx 訂閱
有人可以補上 Vista 的資訊嗎?

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-04-26 22:39:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!