type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
var
TimerID: LongWord;
PercentsLabel: TLabel;
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.1n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
End;
procedure PercentsInstall();
begin
with WizardForm.ProgressGauge do
begin
PercentsLabel.Caption:= 'Установка игры: ' + NumToStr((Position*100)/Max) + ' %';
end;
end;
Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
if WizardForm.CurPageID = wpInstalling then PercentsInstall();
End;
procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
procedure InitializeWizard();
begin
PercentsLabel:= TLabel.Create(WizardForm);
with PercentsLabel do
begin
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(30);
Width:= WizardForm.StatusLabel.Width;
Height:= WizardForm.StatusLabel.Height;
AutoSize:= False;
Transparent := True;
Alignment := taCenter;
Font.Style:= [fsBold, fsItalic];
Font.Size:= 14;
Font.Name:= 'Times New Roman';
Font.Color:= ClMaroon;
Parent:= WizardForm.InstallingPage;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
TimerID:= SetTimer(0, 0, 500 {Установка игры}, WrapTimerProc(@MyTimerProc, 4));
end;
end;[/SPOILER]
Вот скрин от кода процентов:
[SPOILER="Скрин"][IMG]http://s2.ipicture.ru/uploads/20120506/is535had.jpg[/IMG][/SPOILER]
Ребят нужна помощь помогите кто знает. Использую СИС. Требования от Сталкера на библиотеке [B]"get_hw_caps.dll"[/B], но на некоторую конфигурацию информация не верна! Вопрос как это можно исправить на правильную под цифрой 1 и 2, смотреть скрин:[SPOILER="вот"][IMG]http://s2.ipicture.ru/uploads/20120506/2MXRJWRm.jpg[/IMG][/SPOILER]
Скрипт прилагается:
[SPOILER="Скрипт"]
[SOURCE="iss"]#define Processor "2000"
#define VideoCard "255500000"
#define RAM "2048"
#define PageFile "756"
#define WinVerMajor = 5;
#define WinVerMinor = 1;
#define ServicePack = 2;
[Setup]
AppName=System Check
AppVerName=System Check
DefaultDirName={pf32}\System Check
[Files]
Source: compiler:Dll Pack\get_hw_caps.dll; Flags: dontcopy
[Code]
function GetVideoCardName: PAnsiChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PAnsiChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetWindowsName: PAnsiChar; external 'hwc_GetWindowsName@files:get_hw_caps.dll stdcall';
function DetectHardware: Integer; external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetHardDriveFreeSpace(hdd: integer): Integer; external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';
function GetHardDriveName(hdd: integer): PAnsiChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';
function GetHardDriveTotalSpace(hdd: integer): Integer; external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';
function GetHardDrivesCount: Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSystemPage: Integer; external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';
function GetSystemPhys: Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetVidMemNonLocal: Integer; external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';
function GetVideoCardDev: Integer; external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';
function GetVideoCardVen: Integer; external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';
function CheckSystemPage(PreviousPageId: Integer): Integer;
var Page:TWizardPage;
ProcessorName:string;
Processor,ProcessorNamePanel,VideoCardNamePanel,VideoCardPanel,AudioCardNamePanel,RAMTotalPanel,PageFileTotalPanel,AudioCardPanel,RAMPanel,PageFilePanel, SystemNamePanel, SystemPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText,StaticText2:TNewStaticText;
oneGhz,oneMB,Rest:Integer;
begin
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ);
GetVidMemLocal;
GetSoundCards;
GetWindowsName;
oneGhz:=1000;
Rest:=ProcessorMHZ - oneGhz;
oneMB:=1024*1024;
Page:=CreateCustomPage(PreviousPageId,'Апаратное Обоспечение','Программа установки обнаружила следуюшие необходимые компоненты');
StaticText:=TNewStaticText.Create(Page);
with StaticText do
begin
Parent:=Page.Surface;
Caption:='Все компоненты удовлетворяют требованиям игры.';
Left:=0;
Top:=5;
AutoSize:=True;
end;
StaticText2:=TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent:=Page.Surface;
Caption:='Когда Вы будуте готовы продолжить установку, нажмите «Далее»'
Left:=0;
Top:=220;
AutoSize:=True;
end;
//================= Начало - Процессор =================//
Processor := TMemo.Create(Page);
with Processor do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Процессор'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 10;
Color := clAqua;
Left := ScaleX(0);
Top := ScaleY(32);
Width := ScaleX(104);
Height := ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
ProcessorNamePanel := TMemo.Create(Page);
with ProcessorNamePanel do
begin
Parent := Page.Surface;
Lines.Add(' '+ProcessorName+' @'+IntToStr(ProcessorMHZ)+'MHz');
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left := ScaleX(109);
Top := ScaleY(32);
Width := ScaleX(304);
Height := ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
//частота процессора//
if ProcessorMHZ<{#Processor} then
begin
ProcessorNamePanel.Color:=clNavy;
StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.';
end;
//================= Конец - Процессор =================//
//================= Начало - Видеоадаптер =================//
VideoCardPanel:=TMemo.Create(Page);
with VideoCardPanel do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Видеоадаптер'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 10;
Color := clAqua;
Left:=ScaleX(0);
Top:=Processor.Top+27;
Width:=ScaleX(104);
Height:=ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
VideoCardNamePanel:=TMemo.Create(Page);
with VideoCardNamePanel do
begin
Parent:=Page.Surface;
Lines.Add(' '+GetVideoCardName+' '+IntToStr(GetVidMemLocal/oneMB)+' MB');
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left:=ScaleX(109);
Top:=VideoCardPanel.Top;
Width:=ScaleX(304);
Height:=ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
//видео память//
if GetVidMemLocal<{#VideoCard} then
begin
StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.';
VideoCardNamePanel.Color:=clNavy;
end
//================= Конец - Видеоадаптер =================//
//================= Начало - Звуковая карта =================//
AudioCardPanel:=TMemo.Create(Page);
with AudioCardPanel do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Звуковая карта'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 9;
Color := clAqua;
Left := ScaleX(0);
Top:=VideoCardPanel.Top+27;
Width := ScaleX(104);
Height := ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
AudioCardNamePanel:=TMemo.Create(Page);
with AudioCardNamePanel do
begin
Parent:=Page.Surface;
Lines.Add(' '+GetSoundCardName);
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left:=ScaleX(109);
Top:=AudioCardPanel.Top;
Width:=ScaleX(304);
Height:=ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
//аудио//
if GetSoundCards=0 then
begin
StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.';
with
AudioCardNamePanel do
begin
Color:=clred;
Lines.Add('Не обнаружено');
ReadOnly := True; Cursor := crArrow;
end;
end;
//================= Конец - Звуковая карта =================//
//================= Начало - ОЗУ =================//
RAMPanel:=TMemo.Create(Page);
with RAMPanel do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Память ОЗУ'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 10;
Color := clAqua;
Left := ScaleX(0);
Top:=AudioCardPanel.Top+27;
Width := ScaleX(104);
Height := ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
RAMTotalPanel:=TMemo.Create(Page);
with RAMTotalPanel do
begin
Parent:=Page.Surface;
Lines.Add(' '+IntToStr(GetSystemPhys + 1) + ' MB');
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left:=AudioCardNamePanel.Left;
Top:=RAMPanel.Top;
Width:=AudioCardNamePanel.Width;
Height:=ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
//оперативка//
if GetSystemPhys+1<{#RAM} then
begin
RAMTotalPanel.Color:=clred;
StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.';
end;
//================= Конец - ОЗУ =================//
//================= Начало - Файл подкачки =================//
PageFilePanel:=TMemo.Create(Page);
with PageFilePanel do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Файл подкачки'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 9;
Color := clAqua;
Left := ScaleX(0);
Top:=RAMPanel.Top+27;
Width := ScaleX(104);
Height := ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
PageFileTotalPanel:=TMemo.Create(Page);
with PageFileTotalPanel do
begin
Parent:=Page.Surface;
Lines.Add(' '+IntToStr(GetSystemPage)+' MB');
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left:=RAMTotalPanel.Left;
Top:=PageFilePanel.Top;
Width:=RAMTotalPanel.Width;
Height:=ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
//файл подкачки//
if GetSystemPage<{#PageFile} then
begin
PageFileTotalPanel.Color:=clred;
StaticText.Caption:='Компоненты, выделенные красным не удовлетворяют требованиям игры.';
end;
//================= Конец - Файл подкачки =================//
//================= Начало - Операционная система =================//
SystemPanel:=TMemo.Create(Page);
with SystemPanel do
begin
Parent := Page.Surface;
Lines.Add(ExpandConstant(' Система'));
Font.Name:= 'Century Schoolbook';
Font.Size:= 10;
Color := clAqua;
Left := ScaleX(0);
Top:=PageFilePanel.Top+27;
Width := ScaleX(104);
Height := ScaleY(21);
ReadOnly := True; Cursor := crArrow;
end;
SystemNamePanel:=TMemo.Create(Page);
with SystemNamePanel do
begin
Parent:=Page.Surface;
Lines.Add(' '+GetWindowsName);
Font.Name:= 'Franklin Gothic Medium Cond';
Font.Size:= 10;
Left:=PageFileTotalPanel.Left;
Top:=SystemPanel.Top;
Width:=PageFileTotalPanel.Width;
Height:=ScaleY(21);
Color := clLime;
ReadOnly := True; Cursor := crArrow;
end;
Result := Page.ID;
end;
//================= Конец - Операционная система =================//
procedure InitializeWizard();
begin
CheckSystemPage(wpWelcome);
end;[/SOURCE][/SPOILER]