Проблема Как прикрутить прогресс бар к wget'у?

Devils Night

Ветеран
Здорово мужики.
Собственно вопрос, как прикрутить прогресс бар к вгету, ладу не дал как это сделать, пример ниже
Код:
[Setup]
AppName=wget
AppVersion=1.5
;AppVerName=wget 1.5
CreateAppDir=no

[Files]
Source: "wget.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall

[Run]
Filename: "{tmp}\wget.exe"; Parameters: "--no-check-certificate ""https://dl.dropboxusercontent.com/u/27457022/wget_ruboard.zip"" -P ""{pf}\Codec"""; Flags: skipifsilent runhidden; StatusMsg: "Загрузка компонента"

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030102402000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C69636974576964746803F9010E4578706C69636974486569676874038A010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650E496E7374616C6C696E67506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED00000F544E657750726F67726573734261720F4E657750726F677265737342617231044C656674020003546F70026005576964746803A10106486569676874021100000000000000

[Code]
{ RedesignWizardFormBegin } // Не удаляйте эту строку!
// Не изменяйте эту секцию. Она создана автоматически.
var
  NewProgressBar1: TNewProgressBar;

procedure RedesignWizardForm;
begin
  { NewProgressBar1 }
  NewProgressBar1 := TNewProgressBar.Create(WizardForm);
  with NewProgressBar1 do
  begin
    Parent := WizardForm.InstallingPage;
    Left := ScaleX(0);
    Top := ScaleY(96);
    Width := ScaleX(417);
    Height := ScaleY(17);
  end;

{ ReservationBegin }
  // В этом месте вы можете добавить свой код.

{ ReservationEnd }
end;
// Не изменяйте эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удаляйте эту строку!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;
,
пример наляпал в Wizardform designer.
 

sergey3695

Ветеран
Модератор
Devils Night, попробуй проверять размер wget_ruboard.zip, но это лишь в том случае когда известен конечный размер.
 

Devils Night

Ветеран
sergey3695, А, извини, точно, че то ступил я, задал вопрос как даун, толком не обрисовал.
Нужно короче сотворить такую штуковину > При скачивании через wget, в ком строке видно состояние в палках в виде знака равно и в процентах. Так вот нужно сделать так, чтоб при скачивании через wget, передавалось состояние загрузки в нижний прогресс бар на странице установки, чтоб шел ползунок в прогресс баре при скачивании, проценты если чего ненужны, на какой странице будет находиться прогресс бар и происходить скачивание не принципиально. Как то пытался сделать, перебирал разные варианты, и никак, психанул и забыл, сейчас тока вспомнил. Как то так.
 

sergey3695

Ветеран
Модератор
Devils Night, да я прежде чем написать глянул, что это за прога. если бы в заголовок окна передавались проценты можно было б сделать, а так хз. в inno врят ли.
 

sergey3695

Ветеран
Модератор
прикрепил считывание с консольного приложения на delphi. скрипт рабочий, проверил. одно из двух - 1) адаптировать код для inno (вопрос в другом не зависнет ли установщик) 2) написать консольное приложение на дельфях, которое считывало бы инфо с консоли и записывало результат скажем в ini где нить в темпе, а inno считывало, тогда прогрессбар двигаться будет. хотя сомнительно, ini занят будет, врят ли считает. короче геморно больно. хотя можно отловить наш установщик и записывать ему напрямую в эдит или мемо, а потом считывать. так должно работать, но геморно. если будешь делать, помогу, а так влом.
з.ы. Devils Night, о, а там в заголовок передаются проценты ) можно сообразить че нить и в инно ) в процессе. ушел пока кушать. :D
 

Вложения

  • 570 KB Просмотры: 16
Последнее редактирование:

Devils Night

Ветеран
sergey3695, Спасибо! Короче понятно, я предполагал что затея не ахти, в delphi я не волоку, к сожалению, хотя слышал что у inno в отличии от delphi функции урезаны, но ваять инсталл под delphi не силен, то что в over.rar, честно говоря не знаю что с этим делать. Inno Tools Downloader докачивать не умеет, решил заморочится с вгетом, на этом стопорнулся. Еще раз спасибо.
 

sergey3695

Ветеран
Модератор
Devils Night, да брось, все там норм. что-то тупанул
да я прежде чем написать глянул, что это за прога. если бы в заголовок окна передавались проценты можно было б сделать, а так хз
вот блин зоркий глаз. это все предыдущий я виноват :lol:
твое
Код:
[Setup]
AppName=wget
AppVersion=1.5
;AppVerName=wget 1.5
DefaultDirName={tmp}\wget.exe
OutputDir=.

[Files]
Source: "wget.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall

[Run]
Filename: "{tmp}\wget.exe"; Parameters: "--no-check-certificate ""https://dl.dropboxusercontent.com/u/27457022/wget_ruboard.zip"" -P ""{pf}\Codec"""; Flags: skipifsilent runhidden; StatusMsg: "Загрузка компонента"
мое
Код:
#ifdef UNICODE
    #define A "W"
type
  PChar = PAnsiChar;
#else
    #define A "A"
#endif

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: CallbackCtrl.dll; Flags: dontcopy;

[Code]
type
  TTimerProc = procedure (h, msg, idevent, dwTime: Longword);

const
  CaptionF = 'Wget https://dl.dropboxusercontent.com/u/27457022/wget_ruboard.zip';

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function GetWindowText(hWnd: HWND; lpString: String; nMaxCount: Integer): Integer; external 'GetWindowText{#A}@user32.dll stdcall';
function GetWindowTextLength(Wnd: HWnd): Integer; external 'GetWindowTextLength{#A}@user32.dll stdcall';

var
  Str: string;
  wnd:HWND;
  l: integer;

procedure OnTimer(h, msg, idevent, dwTime:Longword);
begin
  if wnd<>0 then begin
  l:= GetWindowTextLength(wnd);
  SetLength(Str, l);
  GetWindowText(wnd,Str,l);
  if Pos('%',Str)<>0 then
  begin
  Delete(Str,Pos('%',Str),l);
  Delete(Str,1,Pos('[',Str));
  WizardForm.Caption:= Str;
  end;
  end else
  wnd:=FindWindowByWindowName(CaptionF);
end;

procedure ExampleButtonClick(Sender: TObject);
begin
  SetTimer(WizardForm.Handle,1,100,WrapTimerProc(@OnTimer,4));
end;

procedure InitializeWizard;
begin
  wnd:=FindWindowByWindowName(CaptionF);
  with TButton.Create(WizardForm) do begin
    SetBounds(ScaleX(10),WizardForm.NextButton.Top,ScaleX(80),ScaleY(23));
    Caption:='Example';
    Parent:=WizardForm;
    OnClick:=@ExampleButtonClick;
  end;
end;
что к чему. запускаешь мое, компилишь. нажимаешь на кнопку. компилишь свое. доходишь до скачки в своем. смотришь на мое - и там в заголовок будут передаваться числа - проценты.
Код:
WizardForm.Caption:= Str
можешь перевести strtoint и в позицию погрессбара или как текст передавай. CaptionF загаловок окна что ищет откуда считать. далее сам. остальное думаю не сложно. что-то пошел я кушать, а там выводи собаку, искупаться надо :lol: что-то долго получилось.
 
Последнее редактирование:
Сверху