Ктонить может [more=исправить этот скрипт]
[Code]
const
NeedSize = 20; //Прописать, сколько мегабайт необходимо
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;
function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';
procedure InitializeWizard();
var
Path: String;
FreeMB, TotalMB: Cardinal;
ListBox: TListBox;
drives: DWORD;
i: integer;
begin
ListBox:= TListBox.Create(WizardForm);
ListBox.Top:= 120;
ListBox.Width:= 300;
ListBox.Height:= ScaleY(90);
ListBox.Parent:= WizardForm.SelectDirPage;
drives:= GetLogicalDrives();
for i:= 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path:= chr(ord('A')+i)+':';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
ListBox.Items.Add(Path + ' - Всего: ' + FloatToStr(round(TotalMB)/1000) +
'Гб - Свободно: ' + FloatToStr(round(FreeMB)/1000) + 'Гб');
end;
end;
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
begin
MsgBox('Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' MB,'#13+ 'а на выбранном Вами диске доступно только '+ IntToStr(FreeMB)+' MB', mbCriticalError, MB_OK)
Result := False;
end;
end;
end;[/more] так, чтоб к примеру при нажатии на диск F:\ (в списке винчестеров), менялся диск для установки с C:\ на F:\
[more=Как я себе это представляю]
[/more]
Эта функция реализована в инсталляторе Сталкера, только там окно со [more=списком винчестеров]
[/more] не очень красивое.
И заодно хотел бы спросить, можно ли сделать так, чтоб Inno жал файлы не по своим алгоритмам, а к примеру с использованием алгоритма от FreeArc?