【发布时间】:2011-05-01 15:23:17
【问题描述】:
是否可以使用 [Code] 部分中的 Inno Setup 刷新桌面?
要么使用SendMessage,要么以某种方式使用SHChangeNotify?
【问题讨论】:
标签: windows inno-setup pascalscript
是否可以使用 [Code] 部分中的 Inno Setup 刷新桌面?
要么使用SendMessage,要么以某种方式使用SHChangeNotify?
【问题讨论】:
标签: windows inno-setup pascalscript
您可以通过在适当的 DLL 中调用 Windows API 中的任何函数来调用它。 Pascal DLL 语法记录在 here。 SHChangeNotify 函数的文档像往常一样在 MSDN 中找到。这个函数在Shell32.dll 中找到(不足为奇!)。
[Code]
const
SHCNE_ASSOCCHANGED = $08000000;
SHCNF_IDLIST = $00000000;
procedure SHChangeNotify(wEventID: integer; uFlags: cardinal; dwItem1, dwItem2: cardinal);
external 'SHChangeNotify@shell32.dll stdcall';
procedure SendChangeNotification;
begin
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
end;
现在您可以在任何您喜欢的地方拨打SendChangeNotification,例如event function。
更新
上面的文字回答了您的问题,如何“在 [Code] 部分中使用 Inno Setup 刷新桌面”。但是您知道 Inno Setup 可以自动为您刷新桌面吗?简单写
ChangesAssociations=yes
在[Setup] 部分。
【讨论】:
SHCNE_ASSOCCHANGED 必须与为零的SHCNF_IDLIST 一起使用,而不是$1000。
ChangesAssociations=yes 将仅在安装的最后被调用!