Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2007, 20:00   #1
MARGO
 
Регистрация: 01.11.2007
Сообщений: 4
По умолчанию WinApi, программа должна выдавать основной номер версии ОС

Подскажите мне надо изменить программу так чтобы чтобы кроме определения операционной версии моего компьютера программа выдавала еще и основной номер версии ОС.
ОС
Код:
unit Ver2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 type
 // перечисляемый тип TWinVer задает возможные значения версий Windows
TWinVer = (wUn,w95,w98,wME,wNT3,wNT4,wW2K,wXP);

function DetectWinVer : TWinVer;
function DetectWinVerStr : string;

var
  Form1: TForm1;
  Ver,s1:string;
implementation

{$R *.dfm}

function DetectWinVer : TWinVer;
//функция анализирует структуру TOSVersionInfo и выдает одно из значений набора TWinVer
var
OSVersionInfo : TOSVersionInfo;

begin {function DetectWinVer}
Result := wUn; //переменная Result:varient используется в теле функции для хранения значение, возвращаемого функцией
OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo); //определяем размер структуры  TOSVersionInfo
if GetVersionEx(OSVersionInfo) then begin //если заполнение записи OSVersionInfo прошло успешно анализируем ее поля
  case OSVersionInfo.DwMajorVersion of
  3: Result := wNT3;
  4: case OSVersionInfo.DwMinorVersion of
     0: if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT
        then Result := wNT4
        else Result := w95;
     10: Result := w98;
     90: Result := wME;
     end;
  5: case OSVersionInfo.DwMinorVersion of
     0: Result := wW2K;
     1: Result := wXP;
     end;
  end;

end;

end; {function DetectWinVer}

function DetectWinVerStr: string;
//функция ставит в соответствие каждому из TWinVer строку с названием версии Windows
const
  VerStr : array[TWinVer] of string = (
  'Unknown',
  'Windows 95',
  'Windows 98',
  'Windows ME',
  'Windows NT 3',
  'Windows NT 4',
  'Windows 2000',
  'Windows XP');
begin
Result := VerStr[DetectWinVer];
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Ver := DetectWinVerStr;
  Label1.Caption :=Ver;
end;

end.
MARGO вне форума Ответить с цитированием
Старый 13.11.2007, 20:41   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
procedure tform1.winver; 
var winv: word; 
begin 
winv := getversion and $0000ffff; 
edit6.text := inttostr(lo(winv))+'.'+inttostr(hi(winv)); 
end;
Функция выдает следующее - 4.10

*********************************** *****************
Как получить полную версию - 4.10.222 ?

Код:
{Объявление процедур и констант} 
function getwindowsversion1: string; 
function whatwindowsisinstalled : string; 
const 
ver_nt_workstation = 0; 
ver_nt_domain_controller = 1; 
ver_nt_server = 2; 
ver_suite_smallbusiness = 1; 
ver_suite_enterprise = 2; 
ver_suite_backoffice = 4; 
ver_suite_communications = 8; 
ver_suite_terminal = $10; 
ver_suite_smallbusiness_restricted = $20; 
ver_suite_embeddednt = $40; 
ver_suite_datacenter = $80; 
ver_suite_singleuserts = $100; 
ver_suite_personal = $200; 
ver_suite_blade = $400; 
type 
tosversioninfoexa = packed record 
old : tosversioninfoa; 
wservicepackmajor : word; 
wservicepackminor : word; 
{ 
wsuitemask 
Набор битовых флагов, определяющих компоненты windows 
ver_suite_backoffice Установлен компонент microsoft backoffice. 
ver_suite_blade Установлен компонент windows .net web server. 
ver_suite_datacenter Установлена windows 2000 или компонент windows .net 
datacenter server 
ver_suite_enterprise Установлена windows 2000 advanced server или компонент 
windows .net enterprise server. 
ver_suite_personal Установлена windows xp home edition. 
ver_suite_smallbusiness Установлен microsoft small business server. 
ver_suite_smallbusiness_restricted Установлен microsoft small business 
server с ограничительной лицензией для клиентов 
ver_suite_terminal Установлен компонент terminal services. 
} 
wsuitemask : word; 
{wproducttype Дополнительная информация о типе операционной системы 
ver_nt_workstation Операционная система windows nt 4.0 workstation, 
windows 2000 professional, 
windows xp home edition, или 
windows xp professional. 
ver_nt_domain_controller Операционная система является контроллером домена. 
ver_nt_server Операционная система является сервером. 
} 
wproducttype : byte; 
wreserved : byte; 
end; 
... 

{Реализация} 
function whatwindowsisinstalled : string; 
var verinfo : tosversioninfoexa; 
begin 
fillchar(verinfo, sizeof(verinfo), 0); 
verinfo.old.dwosversioninfosize := sizeof(tosversioninfoexa); 
if not getversionexa(verinfo.old) then 
begin 
verinfo.old.dwosversioninfosize := sizeof(tosversioninfoa); 
getversionexa(verinfo.old); 
end; 
case verinfo.old.dwplatformid of 
ver_platform_win32_windows: 
if (verinfo.old.dwmajorversion = 4) and 
(verinfo.old.dwbuildnumber = 950) then result := 'windows 95' else 
if (verinfo.old.dwmajorversion = 4) and 
(verinfo.old.dwminorversion = 10) and 
(verinfo.old.dwbuildnumber = 1998) then result := 'windows 98' else 
if (verinfo.old.dwminorversion = 90) then result := 'windows me'; 
ver_platform_win32_nt: 
if verinfo.old.dwmajorversion = 3 then result := 'windows nt 3.51' else 
if verinfo.old.dwmajorversion = 4 then result := 'windows nt 4.0' else 
if verinfo.old.dwmajorversion = 5 then 
if verinfo.old.dwminorversion = 0 then result := 'windows 2000' else 
if verinfo.old.dwminorversion = 1 then result := 'windows xp'; 
ver_platform_win32s: result := 'win32s'; 
end; 
end; 

function getwindowsversion1: string; 
{$ifdef win32} 
const swindowsversion = '%.3d'; 
var 
ver: tosversioninfo; 
platform: string[4]; 
begin 
ver.dwosversioninfosize := sizeof(ver); 
getversionex(ver); 
with ver do begin 
case dwplatformid of 
ver_platform_win32s: platform := '32s'; 
ver_platform_win32_windows: 
begin 
dwbuildnumber := dwbuildnumber and $0000ffff; 
if (dwmajorversion > 4) or ((dwmajorversion = 4) and (dwminorversion >= 10)) then platform := '98' 
else platform := '95'; 
end; 
ver_platform_win32_nt: platform := 'nt'; 
end; 
result := trim(format(swindowsversion, [dwbuildnumber])); 
end; 
end; 
{$else} 
const 
swindowsversion = 'windows%s %d.%d'; 
snt: array[boolean] of string[3] = ('', ' nt'); 
var 
ver: longint; 
begin 
ver := getversion; 
result := format(swindowsversion, [snt[not boolean(hibyte(loword(ver)))], 
lobyte(loword(ver)), hibyte(loword(ver))]); 
end; 
{$endif win32} 

Пример вызова 
label1.caption := whatwindowsisinstalled+' (build '+getwindowsversion1+')';
Автор: О. Гончаренко
mihali4 вне форума Ответить с цитированием
Старый 16.11.2007, 21:14   #3
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Вот тоже не плохой код
Вложения
Тип файла: rar Для WinNT, 2000, XP.rar (198.7 Кб, 23 просмотров)
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, работающая под вистой, должна разделить hdd еще на 2 диска KORT Софт 1 25.08.2008 13:57
Версии Си L_M Общие вопросы C/C++ 1 14.05.2008 22:53
Как работать с TCanvas - на PaintBox1 программа должна рисовать полигон Михаил Юрьевич Общие вопросы Delphi 16 04.01.2008 15:31
Delphi 6 - Программа должна узнать уровень загруженности процессора Никки Общие вопросы Delphi 3 20.11.2007 19:40