WinTB

DLL WinTB 2.1

Нет прав для скачивания

David.D.Rocco

Участник
Проверенный
Пользователь David.D.Rocco разместил новый ресурс:

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

Информация:
Автор: [FONT=Arial][B]David.D.Rocco[/B][/FONT]
Поддерживаемые ОС: Vista, 7, 8

Возможности:
  • Отображение прогресса на панели задач Windows 7/8
  • Отображение эскиза на панели задач Windows Vista/7/8
  • Возможность добавлять кнопки на миниатюру в панели задач Windows 7/8

Узнать больше об этом ресурсе...
 
Библиотека WinTB(WinTB.dll) как совместить Отображение прогресса на панели задач с ISDone ?
 
AlexandR,
Примерно так:
Код:
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;
 
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, если пользуешь рестулсовский Inno, то можно callbackctrl.dll и не таскать с собой :)
Код:
[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;
 
VoLT, спасибо учту, я пока учусь :-[
nik1967, угу, но это уже кому как удобнее, у меня обычная установлена.
 
По Inno от RESTOOLS
я всё же думаю не стоит это делать в основной скрипт, лучше сделать два
один с калбеком (для официального Inno)
другой без (для Inno от RESTOOLS)
что б все могли пользоваться и всем было хорошо
 
David.D.Rocco, и ещё, если можно, то сделать обновление SetTaskBarThumbnailTooltip в реальном времени. Для чего? Что бы можно было во время установки показать во всплывающем сообщении проценты установки, меняющиеся в реальном времени. Я твой модуль вставил в скрипт нашей р.г., естественно за твоим авторством (в модуле).
 
nik1967, каким образом только? Винда же создает этот хинт, а не библиотека.
 
Здраствуйте. Сталкнулся с проблемой отображения изображения на таскбаре с библиотекой WinTB. Сообственно в чем проблема то, если при несвернутой форме нажать win+d, и навести на таксбар то получается неприятная картина:

Как исправить? пробывал mainform прятать за форму,чтобы она двигалась вместе с формой, но это не есть зер гуд так извращаться. Может есть какое-нибудь решение? (я не знаю че сделать... вот и написал)
 
sergey3695, ну правильно, так и должно быть, окна то два. Открой любое другое приложение с двумя окнами, будет также.
Изначально все это дело было через ж сделано. Правильнее было бы открыть исходник inno и сделать по нормальному
 
David.D.Rocco, с iswin7 проблемка, при сворачивании окна (Win7TaskBar20); миниатюра не отображается,c Win7TaskBar12 также (без аеро смотрел). Вот при от рисовке со скином, есть же скины с двумя состояниями (активн и неактивн), так вот форма на которой рисуется всегда неактивна. Кнопка инфо, ну как-то ненужно. (мое личное мнение. спасибо огромное за труды). Кстати если нажать на инфо при свернуто форме, мессаж за формой. (ну это просто написал). А так все супер. (про win+d смысла наверное писать нету). У Win7TaskBar10 таймер, так что при разворачивании мегает немного. У Win7TaskBar11 если форму выбрать через alt+tab потом свернуть, то на миниатюре неприятная картинка.
Открой любое другое приложение с двумя окнами, будет также.
У меня 3 окна в сетапнике, после авторана. Я сделал на форме от mainform. По-другому не смог сделать нормально.
 
Последнее редактирование:
с iswin7 проблемка, при сворачивании окна (Win7TaskBar20)
Потому-что окно скрывается (hide) а не сворачивается.
c Win7TaskBar12 также
Тут то же самое. Не хочет рисовать превью если окно скрыто или свернуто.
Кнопка инфо, ну как-то ненужно.
Для примера всего лишь.
У Win7TaskBar10 таймер, так что при разворачивании мегает немного. У Win7TaskBar11 если форму выбрать через alt+tab потом свернуть, то на миниатюре неприятная картинка.
Что-то такого не удалось разглядеть. Inno ansi у тебя?

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

У меня 3 окна в сетапнике, после авторана. Я сделал на форме от mainform. По-другому не смог сделать нормально.
Имхо самый лучший вариант - использовать MainForm как основную (перенести прямо на нее все), а WizardForm скрыть. Тогда и миниатюра нормально отображается и прогресс с кнопками можно отобразить. Правда много придется в скрипте писать.
 
Всем доброго времени суток !
хотел сделать отображение прогресс бара в панели задач через WinTB+IsDone, но толи винтб изменен толи исдон, в общем не получается, помогите кто может ?

https://yadi.sk/d/e5d2VTRqgZ3qz
 
EvilAlex, чего? у тебя WinTB.iss есть но не подключен, и ... ничего там нет :D У меня все там поразъехалось так что не проверял.
И в ISDone.iss на эту строку добавь вместо закомментированной.
 

Вложения

Назад
Сверху