Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
Habetdin, спасибо огромное, работает)
Единственный нюанс - в Exec(Firefox, 'file:///{tmp}/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res); нету распознавания {tmp}, т.е. работает только если написать прямой путь, типа C:/plugin.xpi. Можно ли заставить выполнять файл из системной папки temp?
R.i.m.s.k.y.
01-05-2011, 13:28
Можно ли заставить выполнять файл из системной папки temp »
можно, заставляй выполняться! ;)
а вообще если бы ты читал хотя бы иногда форум то наверняка наткнулся на функцию ExpandConstant
Exec(Firefox, 'file:///'+ExpandConstant('{tmp}')+'/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res)
R.i.m.s.k.y., спасибо)
извиняюсь за свою некомпетентность)
Может кто-нибудь дать ссылку на depack.exe(вместе с 7z.dll) зарание спасибо
дайте ссылку на depack.exe c 7z.dll
El Sanchez
02-05-2011, 16:44
а с выдергиванием айпишника из выхлопа ipconfig никто не поможет? »собрал свой вариант вычисления айпишника, айпиадреса, айпи, IP адреса, IPAdress, IP Adress, IPAdres, IP Adres (это были теги для поиска
нужен AdapterWatch »
R.i.m.s.k.y., можно и без сторонних средств, например, использовать WMI:
[Code]
type
IP_ADDR_INFO = array of record
Description: String;
IPv4: String;
IPv6: String;
end;
function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
IndexCount, i: Byte;
strBuf, ptrnIPv4, ptrnIPv6: String;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objRegExp := CreateOleObject('VBScript.RegExp');
except
ShowExceptionMessage;
Exit;
end;
ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
ptrnIPv6 := //IPv6 regexp
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
'(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
'((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');
for i := 1 to IndexCount do
try
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
objRegExp.Pattern := ptrnIPv4;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
end;
objRegExp.Pattern := ptrnIPv6;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
end;
except
GetExceptionMessage;
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
end;
Result := (GetArrayLength(IPAddrInfo) > 0);
end;
procedure InitializeWizard();
var
i: Byte;
arr: IP_ADDR_INFO;
begin
if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
MsgBox(
'Description: ' + arr[i].Description + #13#10 +
'IPv4: ' + arr[i].IPv4 + #13#10 +
'IPv6: ' + arr[i].IPv6 + #13#10, mbInformation, MB_OK);
end;
R.i.m.s.k.y.
02-05-2011, 18:44
Спасибо!
insombia
02-05-2011, 21:55
Как сделать чтобы время во время установки ишло?
Как сделать чтобы время во время установки ишло? »
Вам нужно системное время или время до завершения установки?
insombia
03-05-2011, 19:29
YURSHAT время до завершения установки
insombia
[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example
[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;
Source: {win}\Help\; DestDir: {app}; Flags: external;
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Name]
Name: rus; Name: compiler:Name\Russian.isl
[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек
[code_]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;
function GetTickCount: DWord; external 'GetTickCount@kernel32';
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 cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh: mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then {more than hour}
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;
procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Inoaeinu ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
end;
end;
procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
begin
StartInstall:= GetTickCount
TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
end;
end;
procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;
insombia
03-05-2011, 21:31
YURSHAT У тебя случайно нету кода для изменения шрифта обычного на georgia или ещё на какой то?
insombia,
#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: {#Font}; Flags: dontcopy;
[Code]
var
IsCustomFontInstalled: boolean;
FontName: string;
function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';
Procedure InitializeWizard();
begin
ExtractTemporaryFile('{#Font}');
IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
WizardForm.Font.Name:= FontName;
end;
procedure DeInitializeSetup();
begin
WizardForm.Free
if IsCustomFontInstalled then
if RemoveFontResource(ExpandConstant('{tmp}')+'\{#Font}') then SendMessage(HWND_BROADCAST,$1D,0,0);
end;
insombia
03-05-2011, 22:33
vint56 та это как-то сложно запущено помню когда то я по другому использовал шрифты типа langoption но ошибку выдаёт
El Sanchez
04-05-2011, 08:39
insombia,
может так?
[Setup]
DefaultDialogFontName=Georgia
murlakatamenka
04-05-2011, 13:05
insombia,
может так?
Код:
[Setup]
DefaultDialogFontName=Georgia
можно и так, но если у пользователя шрифта не будет ? в таком случае надо скрипт от винта, там шрифт устанавливается в систему пользователя.
insombia,
http://rghost.ru/5463661
как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно
insombia
04-05-2011, 16:00
N00bak
DiskSpanning=true
DiskSliceSize=1145766400
SlicesPerDisk=2
это пример а насчет файлов не знаю
как сделать чтобы писалось типа как тут http://img34.imageshack.us/img34/4061/20110504101831.png
размер жд доступно и т д?
El Sanchez
04-05-2011, 16:12
но если у пользователя шрифта не будет ? »
murlakatamenka, будет использован
8-point Microsoft Sans Serif or MS Sans Serif
в таком случае надо скрипт от винта, там шрифт устанавливается в систему пользователя »
Ну, можно и средствами Inno:
[Files]
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall
как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно »
N00bak, ищите в справке о параметрах DiskSpanning, DiskSliceSize, SlicesPerDisk секции [Setup]:
[Setup]
DiskSpanning=true
...
To optimally fill 4.7 GB recordable DVDs, use:
SlicesPerDisk=3
DiskSliceSize=1566000000
спс)
в первые с такой проблемой столкнулся)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC