[архив] Inno Setup .:[все вопросы]:.

Ответить
 • Просмотры: 10
Аватара пользователя
p3rf3ct1c

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение p3rf3ct1c »

BlackSelf, теоретически, сделать можно, а какая преследуется цель?

Вы расскажите поподробней, что вы хотите сделать и почему нежелательны русские буквы?
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

p3rf3ct1c, почитайте Справку, найдёте много интересного...


Цитата из Справки, раздел Константы:



{userappdata} & {commonappdata}



Путь к папке с данными приложения (Application Data).



а programdata - это какая-то ваша папка? Если у неё путь, который вы указывали ранее C:\ProgramData\2DBoy\WorldOfGoo, то {sd}\ProgramData\2DBoy\WorldOfGoo, где {sd} - системный диск.
Аватара пользователя
p3rf3ct1c

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение p3rf3ct1c »

Serega_,

Спасибо вам! Все получилось.



C:\ProgramData\ у меня скрытая папка как и Application Data, в XP вроде нет папки ProgramData (хотя не знаю) , а у мебя сейчас стоит Win7. Эта папка вроде и в Висте есть.
Аватара пользователя
p3rf3ct1c

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение p3rf3ct1c »

BlackSelf,

Спасибо.



А вы можете подсказать почему у меня в Unpacker'е кнопки не работают, кроме кнопки "Открыть"?
Аватара пользователя
Unsane

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Unsane »

Вешаю обработчик на изменение комбобокса "тип установки":



PHP код:

Код: Выделить всё

WizardForm.TypesCombo.OnChange := @TypesComboOnChange; 






Перестает отрабатываться смена типов (компоненты не изменяются при изменении типа установки). Без обработчика все нормально. Как можно обойти проблему?
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Цитата grinda:



Напишите плиз поподробнее как пользоваться анпакером?
[архив] Inno Setup .:[все вопросы]:.




Насколько я помню, там вместе с анпакером идёт справка, какие ключи использовать...

Есть и обновление:



Inno Setup Unpacker (innounp plus) - расширенная версия распаковщика инсталляторов Inno Setup начиная с версии 2.0.8 по 5.3.0 Beta. Поддерживаются версии Unicode. Русифицирована.

Последний релиз: 0.24 [23.05.2009] -
Скачать 0.24
|
Зеркало 1
|
Зеркало 2




P.S.

Справка по использованию на русском.
Аватара пользователя
Unsane

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Unsane »

От содержимого обработчика вообще ничего не зависит. Повесил пустой обработчик - 0 реакции.



PHP код:

Код: Выделить всё

procedure TypesComboOnChangeT(Sender: TObject);  begin  end;



procedure InitializeWizard();

begin

  WizardForm.TypesCombo.OnChange := @TypesComboOnChangeT;

end; 






Есть ли возможность вызвать эту стандартную процедуру или сделать ее эмуляцию?



з.ы. еще заметил, что из-за этого косяка не отрабатывается установка некоторых компонентов.
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

Цитата volk1234:



ссылки на Unpaker 2.0 и Unpaker 0.23, можно удалить тогда?
[архив] Inno Setup .:[все вопросы]:.




Я думаю лучше Unpaker 0.23 оставить и добавить в строчку с Unpaker 0.24, т.к. это от одного производителя - расширенная китайская версия (модификация), а версию Unpaker 2.0, нужно заменить на более новую, стандартную версию:



Unpaker 2.1
от [21.04.2009] - распаковывает инсталляторы, созданные с помощью Inno Setup, начиная с версии 2.0.18 по 5.2.4.
Аватара пользователя
Unsane

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Unsane »

Здравствуйте всем. Кто нибудь пожалуйста помогите склеить эти коды -
читать дальше »



Цитата:



type

PDisplay_Device = record

cb: DWord;

DeviceName: array [0..31] of char;

DeviceString: array [0..127] of char;

StateFlags: DWord;

DeviceID, DeviceKey: array [0..127] of char;

end;



TMixerCaps = record

vPid, vDriverVersion: DWord;

sName: array [0..31] of char;

Support, cDestinations: DWord;

end;



// Ïðîâåðêà âåðñèè Windows

#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) + "Explorer.exe")) == 1

{Win9x}

TMemoryStatusEx = record

dwLength, dwMemoryLoad: DWord;

LoTotalPhys, LoAvailPhys, LoTotalPageFile, LoAvailPageFile,

LoTotalVirtual, LoAvailVirtual, LoAvailExtendedVirtual, HiTotalPhys,

HiAvailPhys, HiTotalPageFile, HiAvailPageFile, HiTotalVirtual, HiAvailVirtual,

HiAvailExtendedVirtual: Integer;

end;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;

external 'GlobalMemoryStatus@kernel32.dll stdcall';

#else

{WinNT}

TMemoryStatusEx = record

dwLength, dwMemoryLoad: DWord;

LoTotalPhys, HiTotalPhys, LoAvailPhys, HiAvailPhys,

LoTotalPageFile, HiTotalPageFile, LoAvailPageFile, HiAvailPageFile,

LoTotalVirtual, HiTotalVirtual, LoAvailVirtual, HiAvailVirtual, LoAvailExtendedVirtual,

HiAvailExtendedVirtual: Integer;

end;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean;

external 'GlobalMemoryStatusEx@kernel32.dll stdcall';

#endif



const

DISPLAY_DEVICE_PRIMARY_DEVICE = 4;

oneMB = 1024*1024;

NeedMHz = 1800;

NeedVideoRAM = 128;

NeedSoundCard = 'Creative X-Fi';

NeedMB = 512;

NeedPageFile = 1024;



var

InfoPage: TWizardPage;

TopText, BottomText: TNewStaticText;

ChangeText: Boolean;

SystemPanel, ProcessorPanel, VideoPanel,

AudioPanel, RAMPanel, PageFilePanel: TMemo;

SystemVersionPanel, ProcessorMHzPanel, VideoRAMPanel,

AudioNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;

lpCaps: TMixerCaps;

Version: TWindowsVersion;

MemoryEx: TMemoryStatusEx;

n, errCode: Integer;

Keys: TArrayOfString;

DeviceValue: Cardinal;

lpDisplayDevice: PDisplay_Device;



function GetSystemMetrics(nIndex: Integer): Integer;

external 'GetSystemMetrics@user32.dll stdcall';



function GetDeviceCaps(hDC, nIndex: Integer): Integer;

external 'GetDeviceCaps@GDI32 stdcall';



function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer;

external 'CreateDCA@GDI32 stdcall';



function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord): Boolean;

external 'EnumDisplayDevicesA@user32.dll stdcall';



function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TMixerCaps; uSize: LongInt): LongInt;

external 'mixerGetDevCapsA@winmm.dll stdcall';



function mixerGetNumDevs: Integer;

external 'mixerGetNumDevs@winmm.dll stdcall';



// Äîïîëíèòü ÷èñëî äî êðàòíîãî Multiple

function ToMultiple(Bytes, Multiple: Integer): Integer;

begin

if Abs(Bytes/Multiple) > Bytes/Multiple then

Result := (Bytes/Multiple + 1)*Multiple

else

Result := Bytes

end;



// Ïåðåâîä ÷èñëà â çíà÷åíèå Áò/Êá/Ìá/Ãá/Òá (äî 3õ çíàêîâ ïîñëå çàïÿòîé)

function ByteOrTB(Bytes: Extended; noMB: Boolean): String;

begin

if not noMB then

Result := FloatToStr(Int(Bytes)) + ' Ìá'

else

if Bytes < 1024 then

Result := FloatToStr(Int(Bytes)) + ' Áò'

else

if Bytes/1024 < 1024 then

Result := FloatToStr(round((Bytes/1024)*10)/10) + ' Êá'

else

if Bytes/oneMB < 1024 then

Result := FloatToStr(round(Bytes/oneMB*100)/100) + ' Ìá'

else

if Bytes/oneMB/1000 < 1024 then

Result := FloatToStr(round(Bytes/oneMB/1024*1000)/1000) + ' Ãá'

else

Result := FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) + ' Òá'

StringChange(Result, ',', '.')

end;



// Óäàëåíèå íà÷àëüíûõ, êîíå÷íûõ è ïîâòîðíûõ ïðîáåëîâ

function DelSp(String: String): String;

begin

while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1)

Result := Trim(String)

end;



function Size64(Hi, Lo: Integer): Extended;

begin

Result := Lo

if Lo < 0 then

Result := Result + $7FFFFFFF + $7FFFFFFF + 2

for Hi := Hi-1 downto 0 do Result := Result + $7FFFFFFF + $7FFFFFFF + 2

end;



function CheckCPU(NeedMHz: Integer): Boolean;

var

String: String;

begin

String := 'Hardware\Description\System\CentralProcessor'; RegGetSubkeyNames(HKLM, String, Keys) // Êîëè÷åñòâî ÿäåð

for n := 0 to GetArrayLength(Keys)-1 do

RegQueryStringValue(HKLM, String + '\' + Keys[n], 'ProcessorNameString', Keys[n])

if not RegQueryDWordValue(HKLM, String + '\0', '~MHz', DeviceValue) or (DeviceValue < NeedMHz) then

Exit

else

Result := True

end;



function CheckMemorySize(NeedRAM: Integer): Boolean;

begin

MemoryEx.dwLength := SizeOf(MemoryEx)

if not GlobalMemoryStatusEx(MemoryEx) then

MsgBox('Îøèáêà ôóíêöèè:' + #13 + 'GlobalMemoryStatusEx', mbError, mb_Ok)

else

if (ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) < NeedRAM) then

Exit

else

Result := True

end;



procedure CreateCheckForm();

begin



TopText := TNewStaticText.Create(InfoPage)

with TopText do

begin

Parent := InfoPage.Surface

Left := 0

AutoSize := True

end



BottomText := TNewStaticText.Create(InfoPage)

with BottomText do

begin

Parent := InfoPage.Surface

Caption := 'Êîãäà Âû áóäåòå ãîòîâû ïðîäîëæèòü óñòàíîâêó, íàæìèòå «Äàëåå».'

Font.Color := clBlack

Left := 0

Top := 200

AutoSize := True

end



SystemPanel := TMemo.Create(InfoPage)

with SystemPanel do

begin

Text := 'Ñèñòåìà'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := ScaleY(33)

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end



SystemVersionPanel := TMemo.Create(InfoPage)

with SystemVersionPanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := SystemPanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



ProcessorPanel := TMemo.Create(InfoPage)

with ProcessorPanel do

begin

Text := 'Ïðîöåññîð'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := SystemPanel.Top + 27

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end



ProcessorMHzPanel := TMemo.Create(InfoPage)

with ProcessorMHzPanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := ProcessorPanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



VideoPanel := TMemo.Create(InfoPage)

with VideoPanel do

begin

Text := 'Âèäåîàäàïòåð'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := ProcessorPanel.Top + 27

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end



VideoRAMPanel := TMemo.Create(InfoPage)

with VideoRAMPanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := VideoPanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



AudioPanel := TMemo.Create(InfoPage)

with AudioPanel do

begin

Text := 'Çâóêîâàÿ êàðòà'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := VideoPanel.Top + 27

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end



AudioNamePanel := TMemo.Create(InfoPage)

with AudioNamePanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := AudioPanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



RAMPanel := TMemo.Create(InfoPage)

with RAMPanel do

begin

Text := 'Îáú¸ì ïàìÿòè'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := AudioPanel.Top + 27

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end



RAMTotalPanel := TMemo.Create(InfoPage)

with RAMTotalPanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := RAMPanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



PageFilePanel := TMemo.Create(InfoPage)

with PageFilePanel do

begin

Text := 'Ôàéë ïîäêà÷êè'

Alignment := taCenter

Parent := InfoPage.Surface

Left := ScaleX(0)

Top := RAMPanel.Top + 27

Width := ScaleX(100)

Height := ScaleY(22)

ReadOnly := True

Color := $EEEEEE

end;



PageFileTotalPanel := TMemo.Create(InfoPage)

with PageFileTotalPanel do

begin

Alignment := taLeftJustify

Parent := InfoPage.Surface

Left := ScaleX(104)

Top := PageFilePanel.Top

Width := ScaleX(310)

Height := ScaleY(22)

ReadOnly := True

end



end;



procedure UpdateInfo();

var

DeviceName, DeviceKey: String;

begin

ChangeText := False



GetWindowsVersionEx(Version)



// Îïåðàöèîííàÿ ñèñòåìà:

SystemVersionPanel.Color := $CCFFCC



DeviceKey := 'Software\Microsoft\Windows NT\CurrentVersion'

if not UsingWinNT then StringChange(DeviceKey, 'Windows NT', 'Windows')

RegQueryStringValue(HKLM, DeviceKey, 'ProductName', DeviceName)

if RegQueryStringValue(HKLM, DeviceKey, 'CSDVersion', DeviceKey) then

DeviceName := DeviceName + ' ' + DeviceKey

StringChange(DeviceName, 'Microsoft ', '')

SystemVersionPanel.Text := ' ' + DeviceName + ' ñáîðêà ' + IntToStr(Version.Major) + '.' + IntToStr(Version.Minor) +

'.' + IntToStr(Version.Build)



if (Pos('2000 Service Pack 4', SystemVersionPanel.Text) = 0) and // Windows 2000 SP4

(Pos('XP Service Pack 2', SystemVersionPanel.Text) = 0) and // Windows XP SP2

(Pos('Vista', SystemVersionPanel.Text) = 0) then // Windows Vista (c ëþáûì SP èëè áåç íåãî)

begin

SystemVersionPanel.Color := $CCCCFF

ChangeText := True

end



// Ïðîöåññîð:

ProcessorMHzPanel.Color := $CCFFCC



if not CheckCPU(NeedMHz) then

begin

ProcessorMHzPanel.Color := $CCCCFF

ChangeText := True

end



ProcessorMHzPanel.Text := ' ' + DelSp(Keys[0]) + ' @' + IntToStr(DeviceValue) + ' MHz'

if GetArrayLength(Keys) > 1 then

ProcessorPanel.Text := 'Ïðîöåññîðû' // + ' (' + IntToStr(GetArrayLength(Keys)) + ')'



// Âèäåîêàðòà:

VideoRAMPanel.Color := $CCFFCC



lpDisplayDevice.cb := SizeOf(lpDisplayDevice)

DeviceKey := ''

n := 0

while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and

(lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1

for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n]

Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127) // Êëþ÷ äðàéâåðà ïîëó÷àåì èç API

StringChange(DeviceKey, '\Registry\Machine\', '')

errCode := 1

DeviceValue := 0

if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then

for n := 1 to Length(DeviceName) do

begin

DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode

errCode := errCode*$100

end

else

if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then

else

RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue)

DeviceName := ''

for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n]

Delete(DeviceName, Pos(Chr(0), DeviceName), 127)



if DeviceName '' then

if DeviceValue > 0 then

VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False)

else

VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False)

else

begin

VideoRAMPanel.Text := ' Äðàéâåð óñòðîéñòâà íå îáíàðóæåí'

VideoRAMPanel.Color := $CCCCFF

ChangeText := True

end

if (DeviceValue/oneMB < NeedVideoRAM) then

begin

VideoRAMPanel.Color := $CCCCFF

ChangeText := True

end

VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' +

IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) *

GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)'



// Çâóêîâàÿ êàðòà:

AudioNamePanel.Color := $CCFFCC



// for errCode := 0 to 1 do // Âûâîä îñíîâíîãî çâóêîâîãî óñòðîéñòâà

for errCode := 0 to mixerGetNumDevs do

begin

mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps))

DeviceName := ' '

for n := 0 to 31 do DeviceName := DeviceName + lpCaps.sName[n]

Delete(DeviceName, Pos(Chr(0), DeviceName), 31)

Delete(DeviceName, Pos(' [', DeviceName), 31)

StringChange(DeviceName, 'SB ', 'Creative ')

Delete(DeviceName, Pos(' Audio', DeviceName), 31)

SetArrayLength(Keys, errCode)

if errCode > 0 then Keys[errCode-1] := DeviceName

end



if GetArrayLength(Keys) > 1 then

begin

AudioPanel.Text := 'Çâóêîâûå êàðòû'

// AudioPanel.Text := 'Çâóêîâûå êàðòû (' + IntToStr(GetArrayLength(Keys)) +')'

AudioNamePanel.Text := ''

for n := 1 to GetArrayLength(Keys) do

AudioNamePanel.Text := AudioNamePanel.Text + Keys[n-1] // + '(' + IntToStr(n) + ')'

end

else

if GetArrayLength(Keys) = 0 then

begin

AudioNamePanel.Text := ' Äðàéâåð óñòðîéñòâà íå îáíàðóæåí'

AudioNamePanel.Color := $CCCCFF

ChangeText := True

end

else

AudioNamePanel.Text := Keys[0]

if Pos(NeedSoundCard, AudioNamePanel.Text) = 0 then

AudioNamePanel.Text := AudioNamePanel.Text + ' (ðåêîìåíäóåòñÿ ' + NeedSoundCard + ')'



// Îáú¸ì ïàìÿòè:

RAMTotalPanel.Color := $CCFFCC

if not CheckMemorySize(NeedMB) then

begin

RAMTotalPanel.Color := $CCCCFF

ChangeText := True

end

RAMTotalPanel.Text := ' ' + ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16), False) + ' âñåãî, ' +

ByteOrTB(ToMultiple(trunc(Size64(MemoryEx.HiTotalPhys, MemoryEx.LoTotalPhys)/oneMB), 16) -

Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' èñïîëüçóåòñÿ, ' +

ByteOrTB(Size64(MemoryEx.HiAvailPhys, MemoryEx.LoAvailPhys)/oneMB, False) + ' ñâîáîäíî'



// Âèðòóàëüíàÿ ïàìÿòü:

PageFileTotalPanel.Color := $CCFFCC

PageFileTotalPanel.Text := ' ' + ByteOrTB(Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB, False) + ' âñåãî, ' +

ByteOrTB((Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile) -

Size64(MemoryEx.HiAvailPageFile, MemoryEx.LoAvailPageFile))/oneMB, False) + ' çàíÿòî ñèñòåìíûì êýøåì'

if Size64(MemoryEx.HiTotalPageFile, MemoryEx.LoTotalPageFile)/oneMB < NeedPageFile then

begin

PageFileTotalPanel.Color := $CCCCFF

ChangeText := True

end



if ChangeText = True then

begin

TopText.Top := 0

TopText.Caption := 'Íå âñå êîìïîíåíòû óäîâëåòâîðÿþò ìèíèìàëüíûì òðåáîâàíèÿì èãðû.' #13

'Ïîæàëóéñòà, ïðîâåðüòå ïîçèöèè, âûäåëåííûå êðàñíûì öâåòîì.'

TopText.Font.Color := clRed

WizardForm.NextButton.Enabled := False

end

else

begin

TopText.Caption := 'Âñå êîìïîíåíòû ñîîòâåòñòâóþò ìèíèìàëüíûì òðåáîâàíèÿì èãðû.'

TopText.Font.Color := clGreen

TopText.Top := 8

WizardForm.NextButton.Enabled := True

end

end;



procedure InitializeWizard();

begin

InfoPage := CreateCustomPage(wpLicense, 'Àïïàðàòíîå è ïðîãðàììíîå îáåñïå÷åíèå',

'Ïðîãðàììà óñòàíîâêè îáíàðóæèëà ñëåäóþùèå íàîáõîäèìûå êîìïîíåíòû.')

CreateCheckForm() // Ñîçäàíèå îáúåêòîâ TMemo, â êîòîðûõ áóäåò âûâîäèòñÿ èíôîðìàöèÿ î ñèñòåìå

UpdateInfo() // Îáíîâëåíèå èíôîðìàöèè î ñèñòåìå

end;



procedure CurPageChanged(CurPageID: Integer);

begin

if CurPageID = InfoPage.ID then UpdateInfo() // Îáíîâëåíèå èíôîðìàöèè î ñèñòåìå

end;





и
читать дальше »



Цитата:



var n: Integer; FreeMB, TotalMB: Cardinal; VolumeName, FileSystemName: String; VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint; ListBox: TListBox; StartMenuTreeView: TStartMenuFolderTreeView;



const oneMB= 1024*1024;

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';



Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Ïåðåâîä ÷èñëà â çíà÷åíèå áò/Êá/Ìá/Ãá/Òá (äî 3õ çíàêîâ ïîñëå çàïÿòîé)}

Begin

if not noMB then Result:= FloatToStr(Int(Bytes)) +' Ìá' else

if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Áò' else

if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Êá' else

If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Ìá' else

If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Ãá' else

Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Òá'

StringChange(Result, ',', '.')

End;



Function DelSP(String: String): String; { Óäàëåíèå íà÷àëüíûõ, êîíå÷íûõ è ïîâòîðíûõ ïðîáåëîâ }

Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;



Function CutString(String: String; MaxLength: Longint): String; { Îáðåçàòü ñòðîêó äî çàäàííîãî êîë-âà ñèìâîëîâ}

Begin

if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)

else Result:= String;

End;



Procedure GetDiskInfo(Disk: String);

Begin

FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);

GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);

FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='áåç ìåòêè';

End;



Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin

ListBox.Items.Clear

for n:= 1 to 31 do // äèñê 'À' ïðîïóñòèòü

if (GetLogicalDrives and (1 shl n)) > 0 then

if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then

if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');

for n:= 0 to ListBox.Items.Count -1 do begin

Path:= Copy(ListBox.Items[n],1,2) +'\' { åñëè â íàêîïèòåëå íåò äèñêà, ïðîïóñòèòü îáíîâëåíèå }

if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);

if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);

if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' âñåãî| '+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' âñåãî| '+ String;

ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% ñâîá|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;

End;



Procedure ObjectOnClick(Sender: TObject); Begin

Case TObject(Sender) of

ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))

StartMenuTreeView: if StartMenuTreeView.Directory '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'

WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;

end; End;



Function NextButtonClick(CurPageID: Integer): Boolean; Begin

Result:= True

if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Óñòàíîâêà â ñèñòåìíóþ ïàïêó', MB_YESNO or $30) = idYes;

End;



Procedure CurPageChanged(CurPageID: Integer);

Begin

if CurPageID = wpSelectDir then ListBoxRefresh

End;



Procedure InitializeWizard;

Begin

ListBox:= TListBox.Create(WizardForm)

ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))

ListBox.Font.Size:= 9

ListBox.Font.Style:= [fsBold]

ListBox.Font.Name:= 'Courier New';

ListBox.OnClick:= @ObjectOnClick;

ListBox.Parent:= WizardForm.SelectDirPage;

WizardForm.NoIconsCheck.SetBounds(WizardForm.DiskSpaceLabel.Left + 96, WizardForm.DiskSpaceLabel.Top + 1, WizardForm.NoIconsCheck.Width, WizardForm.NoIconsCheck.Height)

WizardForm.NoIconsCheck.OnClick:= @ObjectOnClick

WizardForm.NoIconsCheck.Parent:= WizardForm.SelectProgramGroupPage

WizardForm.NoIconsCheck.Show

StartMenuTreeView:= TStartMenuFolderTreeView.Create(WizardForm)

StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));

StartMenuTreeView.SetBounds(ListBox.Left, ListBox.Top, ListBox.Width, ListBox.Height)

StartMenuTreeView.Parent:= WizardForm.SelectProgramGroupPage

StartMenuTreeView.Cursor:= crHand

StartMenuTreeView.OnChange:=@ObjectOnClick

End;
Аватара пользователя
Serega

Re: [архив] Inno Setup .:[все вопросы]:.

Сообщение Serega »

p3rf3ct1c, Небольшое описание для этих частей не помешало бы. Что делает первый скрипт, что второй? И что должно получится?
Ответить

Вернуться в «Автоматическая установка приложений»