Вопрос Проверка системных требований (isUtils.dll)

Esysex

Мимокрокодил
Ещё раз здравствуйте! Хотел бы добавить в свой инсталл, проверку сис. требований. Чтобы на отдельной странице. Такое возможно?
 

vint56

Ветеран
Проверенный
Esysex,
Код:
[Setup]
AppName=ProgressBar Demo
AppVerName=ProgressBar Demo
DefaultDirName={pf}\ProgressBar Demo

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: isutils.dll; DestDir: "{tmp}"; Flags: dontcopy
Source: back2.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[Code]
Function GetTotalRam: integer; external 'GetTotalRam@files:isutils.dll stdcall';
Function GetVideoName: PANSICHAR; external 'GetVideoName@files:isutils.dll stdcall';
Function GetVideoRam: integer; external 'GetVideoRam@files:isutils.dll stdcall';
Function GetProcessorName: PANSICHAR; external 'GetProcessorName@files:isutils.dll stdcall';
Function GetProcessorFreq: integer; external 'GetProcessorFreq@files:isutils.dll stdcall';
Function GetProcessorCoreCount: integer; external 'GetProcessorCoreCount@files:isutils.dll stdcall';
Function GetSoundCards: integer; external 'GetSoundCards@files:isutils.dll stdcall';
Function GetSoundCardName: PANSICHAR; external 'GetSoundCardName@files:isutils.dll stdcall';
Function GetOsName: PANSICHAR; external 'GetOsName@files:isutils.dll stdcall';
function GetOsNumber: integer; external 'GetOsNumber@files:isutils.dll stdcall';
function GetOsBit: integer; external 'GetOsBit@files:isutils.dll stdcall';
var
Image: TBitmapImage;
RequirementsLbl,ProcessorLbl, ProcessorNameLbl, VideoCardLbl, VideoCardNameLbl, SoundCardLbl,
SoundCardNameLbl, RAMLbl, RAMTotalLbl, SystemLbl, SystemNameLbl: TLabel;
Processor, coreCount, VideoRam, Ram, OpSystem, OpSystemBit:integer;
SystemPage: TWizardPage;

procedure InitializeWizard();
begin
  Processor:=2000;
  VideoRam:=64;
  Ram:=500;
  OpSystem:=513;

  SystemPage := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  ExtractTemporaryFile('back2.bmp');
  Image:=TBitmapImage.Create(WizardForm);
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\back2.bmp ');
  Image.setbounds(0, 0, ScaleX(497), ScaleY(360));
  Image.Parent := SystemPage.Surface;
  Image.Stretch:=True;
 
  RequirementsLbl := TLabel.Create(WizardForm);
  with RequirementsLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(10), ScaleY(75), ScaleX(487), ScaleY(27));
    Transparent:=True;
    WordWrap:=True;
    Alignment := taCenter;
    Font.Color:=$FFFFFF;
    Font.size:=10;
    Font.Style:=[fsBold];
    Caption := 'Программа установки обнаружила следующие компоненты';
    Parent := SystemPage.Surface;
  end;
 
  //================= Начало - Процессор =================//
  ProcessorLbl := TLabel.Create(WizardForm);
  with ProcessorLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(102), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Процессор';
    Parent := SystemPage.Surface;
  end;

  ProcessorNameLbl := TLabel.Create(WizardForm);
  with ProcessorNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(102), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetProcessorName+' @' + IntToStr(GetProcessorFreq) + ' MHz';
    Parent := SystemPage.Surface;
  end;

  if (GetProcessorFreq*GetProcessorCoreCount) < Processor then
   begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    ProcessorNameLbl.font.color:=clred;
   end;
  //================= Конец - Процессор =================//
 
 
//================= Начало - Видеоадаптер =================//

  VideoCardLbl := TLabel.Create(WizardForm);
  with VideoCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(127), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Видеоадаптер';
    Parent := SystemPage.Surface;
  end;

  VideoCardNameLbl := TLabel.Create(WizardForm);
  with VideoCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(127), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetVideoName+' '+inttostr(GetVideoRam)+' Mb';
    Parent := SystemPage.Surface;
  end;

  if GetVideoRam < VideoRam then begin
    RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    VideoCardNameLbl.font.color:=clred;
  end;

//================= Конец - Видеоадаптер =================//


//================= Начало - Звуковая карта =================//

  SoundCardLbl := TLabel.Create(WizardForm);
  with SoundCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(152), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Звуковая карта';
    Parent := SystemPage.Surface;
  end;

  SoundCardNameLbl := TLabel.Create(WizardForm);
  with SoundCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(152), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetSoundCardName;
    Parent := SystemPage.Surface;
  end;

  if GetSoundCards=0 then begin
    RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    SoundCardNameLbl.font.color:=clred;
    SoundCardNameLbl.Caption := 'Звуковая карта отсутствует';
  end;
//================= Конец - Звуковая карта =================//


//================= Начало - ОЗУ =================//

  RAMLbl := TLabel.Create(WizardForm);
  with RAMLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(177), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'ОЗУ';
    Parent := SystemPage.Surface;
  end;

  RAMTotalLbl := TLabel.Create(WizardForm);
  with RAMTotalLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(177), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    //Font.Style:=[fsBold];
    Caption := IntToStr(GetTotalRam + 1) + ' Mb';
    Parent := SystemPage.Surface;
  end;

  if (GetTotalRam+1)<RAM then begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    RAMTotalLbl.font.color:=clred;
  end;

//================= Конец - ОЗУ =================//


//================= Начало - Операционная система =================//

  SystemLbl := TLabel.Create(WizardForm);
  with SystemLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(202), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Система';
    Parent := SystemPage.Surface;
  end;

  SystemNameLbl := TLabel.Create(WizardForm);
  with SystemNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(202), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
  //  Font.Style:=[fsBold];
    Caption := GetOsName+' '+inttostr(GetOsBit)+' Bit';
    Parent := SystemPage.Surface;
  end;


  if OpSystem > GetOsNumber then begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    SystemNameLbl.font.color:=clred;
  end;

//================= Конец - Операционная система =================//
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    SystemPage.ID:
    begin
    WizardForm.InnerNotebook.Left := ScaleX(0);
    WizardForm.InnerNotebook.Top := ScaleY(60);
    WizardForm.InnerNotebook.Width := ScaleX(497);
    WizardForm.InnerNotebook.Height := ScaleY(253);
   end;
  wpSelectDir:
    begin
    WizardForm.InnerNotebook.Left := ScaleX(40);
    WizardForm.InnerNotebook.Top := ScaleY(72);
    WizardForm.InnerNotebook.Width := ScaleX(417);
    WizardForm.InnerNotebook.Height := ScaleY(237);
  end;
end;
end;
 

Esysex

Мимокрокодил
Esysex,
Код:
[Setup]
AppName=ProgressBar Demo
AppVerName=ProgressBar Demo
DefaultDirName={pf}\ProgressBar Demo

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: isutils.dll; DestDir: "{tmp}"; Flags: dontcopy
Source: back2.bmp; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[Code]
Function GetTotalRam: integer; external 'GetTotalRam@files:isutils.dll stdcall';
Function GetVideoName: PANSICHAR; external 'GetVideoName@files:isutils.dll stdcall';
Function GetVideoRam: integer; external 'GetVideoRam@files:isutils.dll stdcall';
Function GetProcessorName: PANSICHAR; external 'GetProcessorName@files:isutils.dll stdcall';
Function GetProcessorFreq: integer; external 'GetProcessorFreq@files:isutils.dll stdcall';
Function GetProcessorCoreCount: integer; external 'GetProcessorCoreCount@files:isutils.dll stdcall';
Function GetSoundCards: integer; external 'GetSoundCards@files:isutils.dll stdcall';
Function GetSoundCardName: PANSICHAR; external 'GetSoundCardName@files:isutils.dll stdcall';
Function GetOsName: PANSICHAR; external 'GetOsName@files:isutils.dll stdcall';
function GetOsNumber: integer; external 'GetOsNumber@files:isutils.dll stdcall';
function GetOsBit: integer; external 'GetOsBit@files:isutils.dll stdcall';
var
Image: TBitmapImage;
RequirementsLbl,ProcessorLbl, ProcessorNameLbl, VideoCardLbl, VideoCardNameLbl, SoundCardLbl,
SoundCardNameLbl, RAMLbl, RAMTotalLbl, SystemLbl, SystemNameLbl: TLabel;
Processor, coreCount, VideoRam, Ram, OpSystem, OpSystemBit:integer;
SystemPage: TWizardPage;

procedure InitializeWizard();
begin
  Processor:=2000;
  VideoRam:=64;
  Ram:=500;
  OpSystem:=513;

  SystemPage := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

  ExtractTemporaryFile('back2.bmp');
  Image:=TBitmapImage.Create(WizardForm);
  Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\back2.bmp ');
  Image.setbounds(0, 0, ScaleX(497), ScaleY(360));
  Image.Parent := SystemPage.Surface;
  Image.Stretch:=True;

  RequirementsLbl := TLabel.Create(WizardForm);
  with RequirementsLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(10), ScaleY(75), ScaleX(487), ScaleY(27));
    Transparent:=True;
    WordWrap:=True;
    Alignment := taCenter;
    Font.Color:=$FFFFFF;
    Font.size:=10;
    Font.Style:=[fsBold];
    Caption := 'Программа установки обнаружила следующие компоненты';
    Parent := SystemPage.Surface;
  end;

  //================= Начало - Процессор =================//
  ProcessorLbl := TLabel.Create(WizardForm);
  with ProcessorLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(102), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Процессор';
    Parent := SystemPage.Surface;
  end;

  ProcessorNameLbl := TLabel.Create(WizardForm);
  with ProcessorNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(102), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetProcessorName+' @' + IntToStr(GetProcessorFreq) + ' MHz';
    Parent := SystemPage.Surface;
  end;

  if (GetProcessorFreq*GetProcessorCoreCount) < Processor then
   begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    ProcessorNameLbl.font.color:=clred;
   end;
  //================= Конец - Процессор =================//


//================= Начало - Видеоадаптер =================//

  VideoCardLbl := TLabel.Create(WizardForm);
  with VideoCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(127), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Видеоадаптер';
    Parent := SystemPage.Surface;
  end;

  VideoCardNameLbl := TLabel.Create(WizardForm);
  with VideoCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(127), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetVideoName+' '+inttostr(GetVideoRam)+' Mb';
    Parent := SystemPage.Surface;
  end;

  if GetVideoRam < VideoRam then begin
    RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    VideoCardNameLbl.font.color:=clred;
  end;

//================= Конец - Видеоадаптер =================//


//================= Начало - Звуковая карта =================//

  SoundCardLbl := TLabel.Create(WizardForm);
  with SoundCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(152), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Звуковая карта';
    Parent := SystemPage.Surface;
  end;

  SoundCardNameLbl := TLabel.Create(WizardForm);
  with SoundCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(152), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
   // Font.Style:=[fsBold];
    Caption := GetSoundCardName;
    Parent := SystemPage.Surface;
  end;

  if GetSoundCards=0 then begin
    RequirementsLbl.Caption:='Компоненты, выделенные красным, не удовлетворяют требованиям';
    SoundCardNameLbl.font.color:=clred;
    SoundCardNameLbl.Caption := 'Звуковая карта отсутствует';
  end;
//================= Конец - Звуковая карта =================//


//================= Начало - ОЗУ =================//

  RAMLbl := TLabel.Create(WizardForm);
  with RAMLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(177), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'ОЗУ';
    Parent := SystemPage.Surface;
  end;

  RAMTotalLbl := TLabel.Create(WizardForm);
  with RAMTotalLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(177), ScaleX(300), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    //Font.Style:=[fsBold];
    Caption := IntToStr(GetTotalRam + 1) + ' Mb';
    Parent := SystemPage.Surface;
  end;

  if (GetTotalRam+1)<RAM then begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    RAMTotalLbl.font.color:=clred;
  end;

//================= Конец - ОЗУ =================//


//================= Начало - Операционная система =================//

  SystemLbl := TLabel.Create(WizardForm);
  with SystemLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(23), ScaleY(202), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := 'Система';
    Parent := SystemPage.Surface;
  end;

  SystemNameLbl := TLabel.Create(WizardForm);
  with SystemNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(170), ScaleY(202), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
  //  Font.Style:=[fsBold];
    Caption := GetOsName+' '+inttostr(GetOsBit)+' Bit';
    Parent := SystemPage.Surface;
  end;


  if OpSystem > GetOsNumber then begin
    RequirementsLbl.Caption := 'Компоненты, выделенные красным, не удовлетворяют требованиям';
    SystemNameLbl.font.color:=clred;
  end;

//================= Конец - Операционная система =================//
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    SystemPage.ID:
    begin
    WizardForm.InnerNotebook.Left := ScaleX(0);
    WizardForm.InnerNotebook.Top := ScaleY(60);
    WizardForm.InnerNotebook.Width := ScaleX(497);
    WizardForm.InnerNotebook.Height := ScaleY(253);
   end;
  wpSelectDir:
    begin
    WizardForm.InnerNotebook.Left := ScaleX(40);
    WizardForm.InnerNotebook.Top := ScaleY(72);
    WizardForm.InnerNotebook.Width := ScaleX(417);
    WizardForm.InnerNotebook.Height := ScaleY(237);
  end;
end;
end;
Спасибо! А то сам бы я не догадался.
 
Сверху