function TForm1.GetLocaleInformation(Flag: Integer): String;
var
pcLCA: Array[0..20] of Char;
begin
if( GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,Flag,pcLCA,19) <= 0 ) then begin
pcLCA[0] := #0;
end;
Result := pcLCA;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetLocaleInformation(LOCALE_SENGLANGUAGE));
end;
參數"Flag"可以取下列值:
LOCALE_NOUSEROVERRIDE { do not use user overrides }
LOCALE_USE_CP_ACP { use the system ACP }
LOCALE_ILANGUAGE { 語言代號 }
LOCALE_SLANGUAGE { 本地語言名稱 }
LOCALE_SENGLANGUAGE { 語言的英語名 }
LOCALE_SABBREVLANGNAME { 語言名稱縮寫 }
LOCALE_SNATIVELANGNAME { 本地語言名稱 }
LOCALE_ICOUNTRY { 國家代號 }
LOCALE_SCOUNTRY { 國家名 }
LOCALE_SENGCOUNTRY { 國家的英語名稱 }
LOCALE_SABBREVCTRYNAME { 國家名縮寫 }
LOCALE_SNATIVECTRYNAME { 國家名 }
LOCALE_IDEFAULTLANGUAGE { 預設語言代號 }
LOCALE_IDEFAULTCOUNTRY { 預設國家代碼 }
LOCALE_IDEFAULTCODEPAGE { 預設oem字碼頁 }
LOCALE_IDEFAULTANSICODEPAGE { 預設ansi字碼頁 }
LOCALE_IDEFAULTMACCODEPAGE { 預設mac頁 }
LOCALE_SLIST { 清單項目分割符 }
LOCALE_IMEASURE { 測量單位0 = 米制, 1 = 英制 }
LOCALE_SDECIMAL { 小數點符號 }
LOCALE_STHOUSAND { 千位分割符 }
LOCALE_SGROUPING { digit grouping }
LOCALE_IDIGITS { number of fractional digits }
LOCALE_ILZERO { leading zeros for decimal }
LOCALE_INEGNUMBER { 負數模式 }
LOCALE_SNATIVEDIGITS { native ascii 0-9 }
LOCALE_SCURRENCY { 本地貨幣符號 }
LOCALE_SINTLSYMBOL { 國際貨幣符號 }
LOCALE_SMONDECIMALSEP { 貨幣小數點分割符 }
LOCALE_SMONTHOUSANDSEP { 貨幣千位分割符 }
LOCALE_SMONGROUPING { monetary grouping }
LOCALE_ICURRDIGITS { # local monetary digits }
LOCALE_IINTLCURRDIGITS { # intl monetary digits }
LOCALE_ICURRENCY { positive currency mode }
LOCALE_INEGCURR { negative currency mode }
LOCALE_SDATE { 日期分割符 }
LOCALE_STIME { 時間分割符 }
LOCALE_SSHORTDATE { 短日期文字 }
LOCALE_SLONGDATE { 長日期文字 }
LOCALE_STIMEFORMAT { time format string }
LOCALE_IDATE { short date format ordering }
LOCALE_ILDATE { long date format ordering }
LOCALE_ITIME { time format specifier }
LOCALE_ITIMEMARKPOSN { time marker position }
LOCALE_ICENTURY { century format specifier (short date) }
LOCALE_ITLZERO { leading zeros in time field }
LOCALE_IDAYLZERO { leading zeros in day field (short date) }
LOCALE_IMONLZERO { leading zeros in month field (short date) }
LOCALE_S1159 { AM designator }
LOCALE_S2359 { PM designator }
LOCALE_ICALENDARTYPE { type of calendar specifier }
LOCALE_IOPTIONALCALENDAR { additional calendar types specifier }
LOCALE_IFIRSTDAYOFWEEK { first day of week specifier }
LOCALE_IFIRSTWEEKOFYEAR { first week of year specifier }
LOCALE_SDAYNAME1 { long name for Monday }
LOCALE_SDAYNAME2 { long name for Tuesday }
LOCALE_SDAYNAME3 { long name for Wednesday }
LOCALE_SDAYNAME4 { long name for Thursday }
LOCALE_SDAYNAME5 { long name for Friday }
LOCALE_SDAYNAME6 { long name for Saturday }
LOCALE_SDAYNAME7 { long name for Sunday }
LOCALE_SABBREVDAYNAME1 { 星期一的縮寫 }
LOCALE_SABBREVDAYNAME2 { 星期二的縮寫 }
LOCALE_SABBREVDAYNAME3 { 星期三的縮寫 }
LOCALE_SABBREVDAYNAME4 { 星期四的縮寫 }
LOCALE_SABBREVDAYNAME5 { 星期五的縮寫 }
LOCALE_SABBREVDAYNAME6 { 星期六的縮寫 }
LOCALE_SABBREVDAYNAME7 { 星期天的縮寫 }
LOCALE_SMONTHNAME1 { long name for January }
LOCALE_SMONTHNAME2 { long name for February }
LOCALE_SMONTHNAME3 { long name for March }
LOCALE_SMONTHNAME4 { long name for April }
LOCALE_SMONTHNAME5 { long name for May }
LOCALE_SMONTHNAME6 { long name for June }
LOCALE_SMONTHNAME7 { long name for July }
LOCALE_SMONTHNAME8 { long name for August }
LOCALE_SMONTHNAME9 { long name for September }
LOCALE_SMONTHNAME10 { long name for October }
LOCALE_SMONTHNAME11 { long name for November }
LOCALE_SMONTHNAME12 { long name for December }
LOCALE_SMONTHNAME13 { long name for 13th month (if exists) }
LOCALE_SABBREVMONTHNAME1 { 一月的縮寫 }
LOCALE_SABBREVMONTHNAME2 { 二月的縮寫 }
LOCALE_SABBREVMONTHNAME3 { 三月的縮寫 }
LOCALE_SABBREVMONTHNAME4 { 四月的縮寫 }
LOCALE_SABBREVMONTHNAME5 { 五月的縮寫 }
LOCALE_SABBREVMONTHNAME6 { 六月的縮寫 }
LOCALE_SABBREVMONTHNAME7 { 七月的縮寫 }
LOCALE_SABBREVMONTHNAME8 { 八月的縮寫 }
LOCALE_SABBREVMONTHNAME9 { 九月的縮寫 }
LOCALE_SABBREVMONTHNAME10 { 十月的縮寫 }
LOCALE_SABBREVMONTHNAME11 { 十一月的縮寫 }
LOCALE_SABBREVMONTHNAME12 { 十二月的縮寫 }
LOCALE_SABBREVMONTHNAME13 { 十三月的縮寫(如果有的話) }
LOCALE_SPOSITIVESIGN { 正號 }
LOCALE_SNEGATIVESIGN { 負號 }
LOCALE_IPOSSIGNPOSN { 正號位置 }
LOCALE_INEGSIGNPOSN { 負號位置 }
LOCALE_IPOSSYMPRECEDES { mon sym precedes pos amt }
LOCALE_IPOSSEPBYSPACE { mon sym sep by space from pos amt }
LOCALE_INEGSYMPRECEDES { mon sym precedes neg amt }
LOCALE_INEGSEPBYSPACE { mon sym sep by space from neg amt }
LOCALE_FONTSIGNATURE { font signature }
LOCALE_SISO639LANGNAME { ISO 縮寫語言名稱 }
LOCALE_SISO3166CTRYNAME { ISO 縮寫國家名稱 }
1、擷取windows版本資訊
可以通過Windows API函數GetVersionEx來獲得。
具體程式如下:
Procedure Tform1.Button1Click(sender:TObject);
Var()
OSVI:OSVERSIONINFO;
begin()
OSVI.dwOSversioninfoSize:=Sizeof(OSVERSIONINFO);
GetVersionEx(OSVI);
label1.Caption:=IntToStr(OSVI.dwMinorVersion)+','
+IntToStr(OSVI.dwMinorVersion)+','
+IntToStr(OSVI.dwBuildNumber)+','
+IntToStr(OSVI.dwPlatformId)+','
+OSVI.szCSDVersion;
end;
end.
2、擷取CPU資訊
可以通過Windows API函數GetSystemInfo來獲得有關資訊。
具體程式如下:
procedure TForm1.Button1Click(Sender: TObject);
Var()
SysInfo:SYSTEM_INFO;
begin()
GetSystemInfo(Sysinfo);
Edit1.Text:='系統中有'+IntToStr(Sysinfo.dwNumberOfProcessors)+'個CPU'
+',類型為'+IntToStr(Sysinfo.dwProcessorType);
end;
end.
3、擷取記憶體資訊
可以通過Windows API函數GlobalMemoryStatus來獲得記憶體資訊。
具體程式如下:
procedure TForm1.Button1Click(Sender: TObject);
Var()
MemInfo:MEMORYSTATUS;
begin()
MemInfo.dwLength:=sizeof(MEMORYSTATUS);
GlobalMemoryStatus(MemInfo);
memo1.Lines.Add(IntToStr(MemInfo.dwMemoryLoad)+'%的記憶體正在使用') ;
memo1.Lines.Add('實體記憶體共有'+IntToStr(MemInfo.dwTotalPhys)+'位元組');
memo1.Lines.Add('可使用的實體記憶體有'+IntToStr(MemInfo.dwAvailPhys)+'位元組');
memo1.Lines.Add('分頁檔總大小為'+IntToStr(MemInfo.dwTotalPageFile)+'位元組') ;
memo1.Lines.Add('尚可分頁檔大小為'+IntToStr(MemInfo.dwAvailPageFile)+'位元組');
memo1.Lines.Add('總虛擬記憶體有'+IntToStr(MemInfo.dwTotalVirtual)+'位元組');
memo1.Lines.Add('未用虛擬記憶體有'+IntToStr(MemInfo.dwAvailVirtual)+'位元組');
end;
end.
或用以下代碼:
memo1.Text:=IntToStr(MemInfo.dwMemoryLoad)+'%的記憶體正在使用'+#13#10
+'可使用的實體記憶體有'+IntToStr(MemInfo.dwAvailPhys)+'位元組'+#13#10
+'分頁檔總大小為'+IntToStr(MemInfo.dwTotalPageFile)+'位元組'+#13#10
+'尚可分頁檔大小為'+IntToStr(MemInfo.dwAvailPageFile)+'位元組'+#13#10
+'總虛擬記憶體有'+IntToStr(MemInfo.dwTotalVirtual)+'位元組'+#13#10
+'未用虛擬記憶體有'+IntToStr(MemInfo.dwAvailVirtual)+'位元組';
來替代memo1.line.add(…)部分。
4、擷取Windows和系統路徑
可以通過Windows(API函數來獲得)
具體程式如下:
procedure TForm1.Button1Click(Sender: TObject);
Var()
SysDir:array[0..128] of char;
begin()
GetWindowsDirectory(SysDir,128);
Edit1.Text:='Windows 路徑:'+SysDir;
GetSystemDirectory(SysDir,128);
Edit1.Text:=Edit1.Text+'; 系統路徑:'+SysDir;
end;
5、擷取使用者註冊資訊
我們都知道,一般在軟體安裝過程中,它都會提示使用者,要求輸入系列號或產品號和使用者的一些註冊資訊(使用者
的公司名稱、使用者名稱等)以及安裝的目錄和路徑等。
通過以下代碼可查看使用者註冊資訊:
procedure TForm1.Button1Click(Sender: TObject);
Var()
Reg:TRegistry;
begin()
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software/Microsoft/Windows NT/CurrentVersion',False);
Edit1.Text:='當前路徑:'+Reg.CurrentPath;
Edit2.Text:='產品系列號:'+Reg.ReadString('ProductId');
Edit3.Text:='產品名:'+Reg.ReadString('ProductName');
Edit4.Text:='註冊公司名稱:'+Reg.ReadString('RegisteredOrganization');
Edit5.Text:='使用者名稱:'+Reg.ReadString('RegisteredOwner');
Edit6.Text:='軟體類型:'+Reg.ReadString('SoftwareType');
Reg.CloseKey;
Reg.Free;
end;
注意:在程式編譯之前,必須在USES語句下添加registry單元。
6、關閉Widows
可以通過Windows API函數ExitWindowsEx來關閉Widows。
procedure TForm1.Button1Click(Sender: TObject);
begin()
If RadioButton1.Checked = True Then
ExitWindowsEx(EWX_LOGOFF,0) //以其他使用者身份登入
ElseIf RadioButton2.Checked = True Then
ExitWindowsEx(EWX_SHUTDOWN,1) //安全關機
ElseIf RadioButton3.Checked = True Then
ExitWindowsEx(EWX_REBOOT,2) //重新啟動電腦
ElseIf RadioButton4.Checked = True Then
ExitWindowsEx(EWX_FORCE,4) //強行關機
ElseIf RadioButton5.Checked = True Then
ExitWindowsEx(EWX_POWEROFF,8); //關閉系統並關閉電源
end;