1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

DLL WinTB 2.1

Библиотека для работы с таскбаром на Windows Vista / 7 в Inno Setup.

  1. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    Пользователь David.D.Rocco разместил новый ресурс:

    WinTB - Библиотека для работы с таскбаром на Windows Vista / 7 в Inno Setup.

    Узнать больше об этом ресурсе...
     
    rDes7, Snoopak96, AlexandR и 8 другим нравится это.
  2. Ветеран

    Регистрация:
    15 июл 2011
    Сообщения:
    44
    Симпатии:
    5
    Пол:
    Мужской
    Библиотека WinTB(WinTB.dll) как совместить Отображение прогресса на панели задач с ISDone ?
     
  3. Ветеран

    Регистрация:
    17 июн 2011
    Сообщения:
    471
    Симпатии:
    282
    AlexandR,
    Примерно так:
    Код (Text):
    function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
    begin
      if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
      LabelPct1.Caption := ' '+IntToStr(OveralPct div 10)+'%';
      [B]SetTaskBarProgressValue(0, ISDoneProgressBar1.Position/10);[/B]
      LabelTime1.Caption:=Cmsg('ElapsedTime')+' '+TimeStr2;
      LabelTime2.Caption:=Cmsg('RemainingTime')+' '+TimeStr1;
      Result := ISDoneCancel;
    end;
     
    AlexandR нравится это.
  4. Старожил Проверенный

    Регистрация:
    15 июн 2011
    Сообщения:
    8
    Симпатии:
    5
    David.D.Rocco,
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    {
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
    break;
    case DLL_PROCESS_DETACH:
    break;
    case DLL_THREAD_ATTACH:
    break;
    case DLL_THREAD_DETACH:
    break;
    }
    return TRUE;
    }
    лишний,
    if (v.dwMajorVersion <= 5)
    winver = 5;
    else if ((v.dwMajorVersion == 6) && (v.dwMinorVersion == 0))
    winver = 6;
    тоже лишние
    В целом код довольно неплох, не вызывает отвращения ... конечно многое не хватает ... но дело практики, может быть опыта
     
    David.D.Rocco нравится это.
  5. Old Men Проверенный

    Регистрация:
    17 июн 2011
    Сообщения:
    450
    Симпатии:
    415
    Пол:
    Мужской
    David.D.Rocco, если пользуешь рестулсовский Inno, то можно callbackctrl.dll и не таскать с собой :)
    Код (Text):
    [Setup]
    AppName=Wintb.dll example
    AppVersion=1.0.0.8
    DefaultDirName={pf}\Wintb.dll example
    DefaultGroupName=Wintb.dll example
    OutputDir=.
    [files]
    Source: wintb.dll; Flags: dontcopy;
    Source: icons\*.*; Flags: dontcopy;
    ;Source: iswin7.dll; Flags: dontcopy;
    Source: ISSkin.dll; Flags: dontcopy;
    Source: Crystal.cjstyles; Flags: dontcopy;
    [code]
    //#include "iswin7.iss"
    #include "isskin.iss"
    const
      TBPF_NOPROGRESS = 0;
      TBPF_INDETERMINATE = 1;
      TBPF_NORMAL = 2;
      TBPF_ERROR = 4;
      TBPF_PAUSED = 8;
      IMAGE_BITMAP = 0;
      IMAGE_ICON = 1;
      USENONE = 0;
      USEAERO = 1;
      USESKIN = 2;
      LR_LOADFROMFILE = $0010;
    // wintb.dll
    procedure WintbStart(); external 'WintbStart@{tmp}\wintb.dll cdecl delayload';
    procedure WintbStop(); external 'WintbStop@{tmp}\wintb.dll cdecl delayload';
    procedure SetTaskBarProgressValue(Value: Longint); external 'SetTaskBarProgressValue@{tmp}\wintb.dll cdecl delayload';
    procedure SetTaskBarProgressState(Value: Longint); external 'SetTaskBarProgressState@{tmp}\wintb.dll cdecl delayload';
    procedure SetTaskBarTitle(const Caption: PAnsiChar); external 'SetTaskBarTitle@{tmp}\wintb.dll cdecl delayload';
    procedure SetTaskBarThumbnailTooltip(const Hint: PAnsiChar); external 'SetTaskBarThumbnailTooltip@{tmp}\wintb.dll cdecl delayload';
    procedure SetTaskBarOverlayIcon(Icon: Longint); external 'SetTaskBarOverlayIcon@{tmp}\wintb.dll cdecl delayload';
    function TaskBarAddButton(Image, ImageType: Longint; Hint: PAnsiChar; Event: Longint; Border: Boolean): Longint; external 'TaskBarAddButton@{tmp}\wintb.dll cdecl delayload';
    procedure TaskBarCreateButtons(); external 'TaskBarCreateButtons@{tmp}\wintb.dll cdecl delayload';
    procedure TaskBarButtonEnabled(Button: Longint; Enabled: Boolean); external 'TaskBarButtonEnabled@{tmp}\wintb.dll cdecl delayload';
    procedure TaskBarButtonToolTip(Button: Longint; Hint: PAnsiChar); external 'TaskBarButtonToolTip@{tmp}\wintb.dll cdecl delayload';
    procedure TaskBarButtonImage(Button, Image, ImageType: Longint); external 'TaskBarButtonImage@{tmp}\wintb.dll cdecl delayload';
    procedure Win6TaskBarV1_0A(WForm, MForm: HWND; Time: Longint); external 'Win6TaskBarV1_0A@{tmp}\wintb.dll cdecl delayload';
    procedure Win6TaskBarV1_0B(WForm, MForm: HWND; Time, p1, p2, p3, p4: Longint); external 'Win6TaskBarV1_0B@{tmp}\wintb.dll cdecl delayload';
    procedure Win6TaskBarV1_0C(WForm, MForm: HWND; Time, p1, p2: Longint); external 'Win6TaskBarV1_0C@{tmp}\wintb.dll cdecl delayload';
    procedure Win6TaskBarV1_1(WForm: HWND); external 'Win6TaskBarV1_1@{tmp}\wintb.dll cdecl delayload';
    procedure Win6TaskBarV1_2(WForm, MForm: HWND; Mode: Longint); external 'Win6TaskBarV1_2@{tmp}\wintb.dll cdecl delayload';
    // winapi
    function LoadImage(hInst: Longint; ImageName: PAnsiChar; ImageType, X, Y, Flags: Longint): Longint; external 'LoadImageA@user32.dll stdcall';
    function DestroyIcon(hIcon: Longint): BOOL; external 'DestroyIcon@user32.dll stdcall';
    function DeleteObject(hObj: Longint): BOOL; external 'DeleteObject@gdi32.dll stdcall';
    var
      hBack, hNext, hCancel, hInfo: Longint;
      hImg1, hImg2, hImg3, hImg4, hImg5: Longint;
    procedure BtnOnClick(Button: Longint);
    begin
      case Button of
        hBack: WizardForm.BackButton.OnClick(WizardForm.BackButton);
        hNext: WizardForm.NextButton.OnClick(WizardForm.NextButton);
        hCancel: WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
        hInfo: MsgBox('Wintb.dll example', mbInformation, MB_OK);
      end;
    end;
    procedure InitializeWizard();
    begin
      ExtractTemporaryFile('wintb.dll');
      //ExtractTemporaryFile('iswin7.dll');
      ExtractTemporaryFile('1.ico');
      ExtractTemporaryFile('2.ico');
      //ExtractTemporaryFile('3.ico');
      //ExtractTemporaryFile('4.ico');
      //ExtractTemporaryFile('1.bmp');
      //ExtractTemporaryFile('2.bmp');
      ExtractTemporaryFile('3.bmp');
      ExtractTemporaryFile('4.bmp');
      ExtractTemporaryFile('5.bmp');
      WintbStart();
      SetTaskBarProgressValue(40);
      SetTaskBarProgressState(TBPF_PAUSED);
      SetTaskBarTitle('Приветствие'); // работает в win xp
      SetTaskBarThumbnailTooltip('Пример wintb v8');
      hImg1 := LoadImage(0, ExpandConstant('{tmp}\1.ico'), IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
      hImg2 := LoadImage(0, ExpandConstant('{tmp}\2.ico'), IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
      hImg3 := LoadImage(0, ExpandConstant('{tmp}\3.bmp'), IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE);
      hImg4 := LoadImage(0, ExpandConstant('{tmp}\4.bmp'), IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE);
      hImg5 := LoadImage(0, ExpandConstant('{tmp}\5.bmp'), IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE);
      SetTaskBarOverlayIcon(hImg2); // только ico
      hBack := TaskBarAddButton(hImg1, IMAGE_ICON, '< Назад', CallbackAddr('BtnOnClick'), true); // ico или bmp
      hNext := TaskBarAddButton(hImg2, IMAGE_ICON, 'Далее >', CallbackAddr('BtnOnClick'), true); // 7 штук максимум
      hCancel := TaskBarAddButton(hImg3, IMAGE_BITMAP, 'Отмена установки', CallbackAddr('BtnOnClick'), true);
      hInfo := TaskBarAddButton(hImg5, IMAGE_BITMAP, 'Info', CallbackAddr('BtnOnClick'), true);
      TaskBarCreateButtons;
      //example 1
      //Win6TaskBarV1_0A(WizardForm.Handle, MainForm.Handle, 100);
      //example 2
      // совместимо с iswin7.dll:
      //iswin7_create;
      //Win6TaskBarV1_0B(WizardForm.Handle, MainForm.Handle, 100, 0, 0, 0, 47);
      //example 3
      // совместимо с isskin.dll
      //Win6TaskBarV1_0C(WizardForm.Handle, MainForm.Handle, 100, 27, 6);
      //example 4
      // не поддерживает остальные плюшки
      //Win6TaskBarV1_1(WizardForm.Handle);
      //example 5
      //iswin7_create;
      Win6TaskBarV1_2(WizardForm.Handle, MainForm.Handle, USESKIN);
    end;
    procedure CurPageChanged(CurPageID: Integer);
    begin
      case CurPageID of
        wpWelcome: begin
          TaskBarButtonEnabled(hback, false);
          SetTaskBarTitle('Приветствие');
        end;
        wpSelectDir: begin
          TaskBarButtonEnabled(hback, true);
          TaskBarButtonImage(hnext, hImg2, IMAGE_ICON);
          TaskBarButtonToolTip(hnext, 'Далее >');
          SetTaskBarTitle('Выбор каталога');
        end;
        wpReady: begin
          TaskBarButtonImage(hnext, hImg4, IMAGE_BITMAP);
          TaskBarButtonToolTip(hnext, 'Установить');
          SetTaskBarTitle('Все готово');
        end;
        wpInstalling: begin
          TaskBarButtonEnabled(hback, false);
          TaskBarButtonEnabled(hnext, false);
          SetTaskBarTitle('Установка');
        end;
        wpFinished: begin
          TaskBarButtonEnabled(hnext, true);
          TaskBarButtonEnabled(hcancel, false);
          TaskBarButtonToolTip(hnext, 'Завершить');
          TaskBarButtonToolTip(hcancel, 'Выход');
          SetTaskBarTitle('Завершение');
        end;
      end;
    end;
    procedure DeinitializeSetup();
    begin
    //  iswin7_free;
      ShowWindow(WizardForm.Handle, SW_HIDE);
      UnloadSkin;
      WintbStop;
      DestroyIcon(hImg1);
      DestroyIcon(hImg2);
      DeleteObject(hImg3);
      DeleteObject(hImg4);
      DeleteObject(hImg5);
    end;
    procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
    begin
      TaskBarButtonEnabled(hback, false);
      TaskBarButtonEnabled(hnext, false);
      TaskBarButtonEnabled(hcancel, false);
      Confirm:=false;
    end;
     
    David.D.Rocco нравится это.
  6. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    VoLT, спасибо учту, я пока учусь :-[
    nik1967, угу, но это уже кому как удобнее, у меня обычная установлена.
     
  7. Старожил Проверенный

    Регистрация:
    15 июн 2011
    Сообщения:
    8
    Симпатии:
    5
    По Inno от RESTOOLS
    я всё же думаю не стоит это делать в основной скрипт, лучше сделать два
    один с калбеком (для официального Inno)
    другой без (для Inno от RESTOOLS)
    что б все могли пользоваться и всем было хорошо
     
  8. Old Men Проверенный

    Регистрация:
    17 июн 2011
    Сообщения:
    450
    Симпатии:
    415
    Пол:
    Мужской
    David.D.Rocco, и ещё, если можно, то сделать обновление SetTaskBarThumbnailTooltip в реальном времени. Для чего? Что бы можно было во время установки показать во всплывающем сообщении проценты установки, меняющиеся в реальном времени. Я твой модуль вставил в скрипт нашей р.г., естественно за твоим авторством (в модуле).
     
  9. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    nik1967, каким образом только? Винда же создает этот хинт, а не библиотека.
     
  10. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    Здраствуйте. Сталкнулся с проблемой отображения изображения на таскбаре с библиотекой WinTB. Сообственно в чем проблема то, если при несвернутой форме нажать win+d, и навести на таксбар то получается неприятная картина:
    [​IMG]
    Как исправить? пробывал mainform прятать за форму,чтобы она двигалась вместе с формой, но это не есть зер гуд так извращаться. Может есть какое-нибудь решение? (я не знаю че сделать... вот и написал)
     
  11. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    sergey3695, ну правильно, так и должно быть, окна то два. Открой любое другое приложение с двумя окнами, будет также.
    Изначально все это дело было через ж сделано. Правильнее было бы открыть исходник inno и сделать по нормальному
     
    sergey3695 нравится это.
  12. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    David.D.Rocco, тоесть тока так.
     
  13. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    sergey3695 нравится это.
  14. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    David.D.Rocco, с iswin7 проблемка, при сворачивании окна (Win7TaskBar20); миниатюра не отображается,c Win7TaskBar12 также (без аеро смотрел). Вот при от рисовке со скином, есть же скины с двумя состояниями (активн и неактивн), так вот форма на которой рисуется всегда неактивна. Кнопка инфо, ну как-то ненужно. (мое личное мнение. спасибо огромное за труды). Кстати если нажать на инфо при свернуто форме, мессаж за формой. (ну это просто написал). А так все супер. (про win+d смысла наверное писать нету). У Win7TaskBar10 таймер, так что при разворачивании мегает немного. У Win7TaskBar11 если форму выбрать через alt+tab потом свернуть, то на миниатюре неприятная картинка.
    У меня 3 окна в сетапнике, после авторана. Я сделал на форме от mainform. По-другому не смог сделать нормально.
     
    Последнее редактирование: 26 май 2014
    David.D.Rocco нравится это.
  15. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    Потому-что окно скрывается (hide) а не сворачивается.
    Тут то же самое. Не хочет рисовать превью если окно скрыто или свернуто.
    Для примера всего лишь.
    Что-то такого не удалось разглядеть. Inno ansi у тебя?

    Рекомендую все таки использовать inno unicode и версию Win7TaskBar10. Или Win7TaskBar11 если не требуется отображение прогресса и кнопок.

    Имхо самый лучший вариант - использовать MainForm как основную (перенести прямо на нее все), а WizardForm скрыть. Тогда и миниатюра нормально отображается и прогресс с кнопками можно отобразить. Правда много придется в скрипте писать.
     
  16. Ветеран Проверенный

    Регистрация:
    28 июн 2011
    Сообщения:
    169
    Симпатии:
    226
    Пол:
    Мужской
    Snoopak96 нравится это.
  17. Ветеран

    Регистрация:
    18 авг 2011
    Сообщения:
    204
    Симпатии:
    93
    Всем доброго времени суток !
    хотел сделать отображение прогресс бара в панели задач через WinTB+IsDone, но толи винтб изменен толи исдон, в общем не получается, помогите кто может ?

    https://yadi.sk/d/e5d2VTRqgZ3qz
     
  18. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    EvilAlex,
    Код (Text):
      SetTaskBarProgressValue(0, OveralPct div 10);
     
  19. Ветеран

    Регистрация:
    18 авг 2011
    Сообщения:
    204
    Симпатии:
    93
    Ругается на эту строчку...

    Unknown identifier "SetTaskBarProgressValue" - какой идентификатор и куда вписать ?
     
  20. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    1.143
    Симпатии:
    732
    EvilAlex, чего? у тебя WinTB.iss есть но не подключен, и ... ничего там нет :D У меня все там поразъехалось так что не проверял.
    И в ISDone.iss на эту строку добавь вместо закомментированной.
     

    Вложения:

    • MyScript.iss
      Размер файла:
      19,3 КБ
      Просмотров:
      44

Поделиться этой страницей