View Full Version : چگونه میتوان نوع ویندوز را تشخیص داد؟win98,win2000,winxp
khafanovich
سه شنبه 30 دی 1382, 09:14 صبح
من میخواهم در دلفی 7 برنامه ای بنویسم که در منطق برنامه نیاز به دانستن نوع ویندوز نصب شده است؟
لطفا راهنمایی کنید.ممنون
اگر api خاصی دارد....آیا این api در مام ویتدوز ها مشترک است؟
ممنون.
Delphi-Clinic
سه شنبه 30 دی 1382, 09:54 صبح
{$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;
khafanovich
چهارشنبه 01 بهمن 1382, 22:57 عصر
متاسفانه این سورس کد فقط یک سرس اعداد در اختیار ما قرار میدهد؟!!!
اگر میشود راه بهتری را پیشنهاد کنید.من به دنبال نوع ویندوز هستم!!
win98,xp,2000
آیا api برای این منظور وجود دارد؟
Kambiz
پنج شنبه 02 بهمن 1382, 01:09 صبح
function OperatingSystemDescription: String;
begin
if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and (Win32MajorVersion = 4) then
begin
if (Win32MinorVersion = 90) and (Win32BuildNumber = 3000) then
Result := 'Windows Me'
else if (Win32MinorVersion = 1) and (Win32BuildNumber = 2222) then
Result := 'Windows 98 SE'
else if Win32MinorVersion = 0 then
Result := 'Windows 95 ' + Win32CSDVersion
else
Result := Format('Windows %d.%d (Build %d) %s', [Win32MajorVersion,
Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]);
end
else if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
if (Win32MajorVersion = 5) and (Win32MinorVersion = 0) then
Result := Format('Windows 2000 (Build %d) %s', [Win32BuildNumber, Win32CSDVersion])
else if (Win32MajorVersion = 5) and (Win32MinorVersion = 1) then
Result := Format('Windows XP (Build %d) %s', [Win32BuildNumber, Win32CSDVersion])
else
Result := Format('Windows NT %d.%d (Build %d) %s', [Win32MajorVersion,
Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]);
end
else
Result := Format('Windows %d.%d (Build %d) %s', [Win32MajorVersion,
Win32MinorVersion, Win32BuildNumber, Win32CSDVersion]);
end;
khafanovich
پنج شنبه 02 بهمن 1382, 10:53 صبح
آقای delphiArea واقعا ممنون.به زودی یک حال اساسی به سایت میخواهم بدهم.
واقعا از شما دوستانی که اینقدر با حوصله جواب میدهید ممنون هستم.ان شاالله جبران میکنم.
در ضمن به امضا من مخصوصا قسمت Share or die توجه کنید. :D
delphi area = the delphi area 51 :wink:
vcldeveloper
یک شنبه 12 بهمن 1382, 02:27 صبح
از رجیستری ویندوز هم می شه نام و version ویندوز رو بدست آورد. اتفاقا راحتر هم هست
شفیعی
شنبه 03 اردیبهشت 1384, 05:29 صبح
سلام
دوست عزیز از داخل رجیستری چطوری می توان نوع ویندوز را تشخیص داد
vcldeveloper
شنبه 03 اردیبهشت 1384, 07:21 صبح
دوست عزیز از داخل رجیستری چطوری می توان نوع ویندوز را تشخیص داد
در ویندوزهای NT Base:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
مقادیر زیر:
CurrentBuildNumber
CurrentVersion
CSDVersion
ProductName
در ویندوزهای 9X فکر کنم بجای زیرشاخه Windows NT در زیر شاخه Windows باشه.
m-khorsandi
شنبه 03 اردیبهشت 1384, 12:35 عصر
درود
const
cOsUnknown = -1;
cOsWin95 = 0;
cOsWin98 = 1;
cOsWin98SE = 2;
cOsWinME = 3;
cOsWinNT = 4;
cOsWin2000 = 5;
cOsXP = 6;
function GetOperatingSystem: Integer;
var
osVerInfo: TOSVersionInfo;
majorVer, minorVer: Integer;
begin
Result := cOsUnknown;
{ set operating system type flag }
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 := cOsXP
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetOperatingSystem));
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.