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
Узнать больше об этом ресурсе...
 

AlexandR

Новичок
Библиотека WinTB(WinTB.dll) как совместить Отображение прогресса на панели задач с ISDone ?
 

Snoopak96

Старожил
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;
 

VoLT

Мимокрокодил
Проверенный
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;
тоже лишние
В целом код довольно неплох, не вызывает отвращения ... конечно многое не хватает ... но дело практики, может быть опыта
 

nik1967

Old Men
Проверенный
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;
 

David.D.Rocco

Участник
Проверенный
VoLT, спасибо учту, я пока учусь :-[
nik1967, угу, но это уже кому как удобнее, у меня обычная установлена.
 

VoLT

Мимокрокодил
Проверенный
По Inno от RESTOOLS
я всё же думаю не стоит это делать в основной скрипт, лучше сделать два
один с калбеком (для официального Inno)
другой без (для Inno от RESTOOLS)
что б все могли пользоваться и всем было хорошо
 

nik1967

Old Men
Проверенный
David.D.Rocco, и ещё, если можно, то сделать обновление SetTaskBarThumbnailTooltip в реальном времени. Для чего? Что бы можно было во время установки показать во всплывающем сообщении проценты установки, меняющиеся в реальном времени. Я твой модуль вставил в скрипт нашей р.г., естественно за твоим авторством (в модуле).
 

David.D.Rocco

Участник
Проверенный
nik1967, каким образом только? Винда же создает этот хинт, а не библиотека.
 

sergey3695

Ветеран
Модератор
Здраствуйте. Сталкнулся с проблемой отображения изображения на таскбаре с библиотекой WinTB. Сообственно в чем проблема то, если при несвернутой форме нажать win+d, и навести на таксбар то получается неприятная картина:

Как исправить? пробывал mainform прятать за форму,чтобы она двигалась вместе с формой, но это не есть зер гуд так извращаться. Может есть какое-нибудь решение? (я не знаю че сделать... вот и написал)
 

David.D.Rocco

Участник
Проверенный
sergey3695, ну правильно, так и должно быть, окна то два. Открой любое другое приложение с двумя окнами, будет также.
Изначально все это дело было через ж сделано. Правильнее было бы открыть исходник inno и сделать по нормальному
 

sergey3695

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

David.D.Rocco

Участник
Проверенный
с iswin7 проблемка, при сворачивании окна (Win7TaskBar20)
Потому-что окно скрывается (hide) а не сворачивается.
c Win7TaskBar12 также
Тут то же самое. Не хочет рисовать превью если окно скрыто или свернуто.
Кнопка инфо, ну как-то ненужно.
Для примера всего лишь.
У Win7TaskBar10 таймер, так что при разворачивании мегает немного. У Win7TaskBar11 если форму выбрать через alt+tab потом свернуть, то на миниатюре неприятная картинка.
Что-то такого не удалось разглядеть. Inno ansi у тебя?

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

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

EvilAlex

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

https://yadi.sk/d/e5d2VTRqgZ3qz
 

sergey3695

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

Вложения

Сверху