Inno Setup window 在任务栏中预览

Inno Setup window preview in taskbar

当您将鼠标悬停在任务栏内的图标上时,所有程序和打开的文件都有预览。

但是对于 Inno Setup 制作的安装程序,似乎没有预览。有解决这个问题的方法或技巧吗?

虽然一些具有自定义设计的游戏安装程序(使用 Inno Setup)在任务栏中有预览。例如:
http://fs2.filegir.com/cuttlas/setup.exe

我认为这是因为任务栏按钮 link 被设置到 Inno Setup 的一个不可见的内部 window 而不是可见的向导 window。这也解释了为什么任务栏按钮的标题可能与向导 window 不同。请注意,它们始终与 windows 匹配,其中预览有效。

如果不修改 Inno Setup 本身的代码,您无能为力。

您发布的 link 不是标准的 Inno Setup。请注意其日志文件中的 "5.5.1*.ee2**"*。他们可能对 Inno Setup 进行了重大修改。请注意,当(在 Windows 10 中)将鼠标悬停在预览 window 上时,向导 window 保持可见(其他 windows 模糊)。使用标准 Inno Setup 时,所有 windows 模糊,包括向导。这是因为他们的任务栏按钮 linked 到向导 window。在标准 Inno Setup 中,它不是。

我找到了一个很棒的库来解决这个问题:

https://mega.co.nz/#F!RcQkhSxI!_ZsnpdapAeoVVWEgVw2iMQ

使用 WinTB v2.0 您可以轻松打开任务栏上的预览:

#include "WinTB.iss"

[Setup]
AppName=Wintb.dll example
AppVersion=2.0
DefaultDirName={pf}\Wintb.dll example
DefaultGroupName=Wintb.dll example
OutputDir=.

[files]
Source: wintb.dll; Flags: dontcopy;

[code]

procedure InitializeWizard();
begin
  ExtractTemporaryFile('wintb.dll');

  Win7TaskBar11(); 
end;

没有任何外部插件或dll,可以通过这个技巧解决:

[Code]
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongW@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
Function GetWindow (HWND: Longint; uCmd: cardinal): Longint;external 'GetWindow@user32.dll stdcall';

procedure InitializeWizard();
begin
SetWindowLong(WizardForm.Handle, -8,GetWindowLong(GetWindow(WizardForm.Handle, 4),-8));
end;