【问题标题】:Inno Setup refresh desktopInno Setup 刷新桌面
【发布时间】:2011-05-01 15:23:17
【问题描述】:

是否可以使用 [Code] 部分中的 Inno Setup 刷新桌面?

要么使用SendMessage,要么以某种方式使用SHChangeNotify

【问题讨论】:

    标签: windows inno-setup pascalscript


    【解决方案1】:

    您可以通过在适当的 DLL 中调用 Windows API 中的任何函数来调用它。 Pascal DLL 语法记录在 hereSHChangeNotify 函数的文档像往常一样在 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] 部分。

    【讨论】:

    • 感谢您的回复。但它是如何工作的?目前我正在尝试: external 'SHChangeNotify(0x8000000, 0x1000, 0, 0)@Shell32.dll stdcall';但我得到语法错误。
    • @s0mmer:这不是正确的语法。首先,函数的声明应该只说明签名是什么以及函数驻留在哪里(如果它是外部的)。调用函数时输入的参数!此外,MSDN 声明SHCNE_ASSOCCHANGED 必须与为零的SHCNF_IDLIST 一起使用,而不是$1000
    • 完美!非常感谢!
    • 这在我们将 inno 用于其他任务时非常有用,例如编写小型帕斯卡程序。见http://www.vincenzo.net/isxkb/index.php?title=Writing_quick_Pascal_programs_with_Inno_Setup。特别是因为ChangesAssociations=yes在安装的最后被调用!
    猜你喜欢
    • 2015-11-22
    • 2022-11-04
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多