【问题标题】:How Inno Setup hides "pin" command in the Taskbar menuInno Setup 如何在任务栏菜单中隐藏“pin”命令
【发布时间】:2018-06-05 18:10:09
【问题描述】:

当我通过 Inno Setup 构建 .exe 时和之后,我运行 .exe,当我右键单击应用程序的任务栏按钮时,我只能看到一个项目“关闭窗口”。当我通过 Visual Studio 或 Windows 中的任何其他程序实际构建 exe 时,当我单击鼠标右键时,我可以看到 3 个项目。

  1. 我的应用的名称。
  2. 将此程序固定到任务栏。
  3. 关闭窗口。

我的问题是 Inno Setup 如何做到这一点,我如何以编程方式实现它?

【问题讨论】:

    标签: windows winapi inno-setup


    【解决方案1】:

    发件人:
    如何防止用户将我的程序固定到任务栏?
    https://blogs.msdn.microsoft.com/oldnewthing/20110601-00/?p=10523

    在程序中直接使用System.App­User­Model.Prevent­Pinning

    #include <Windows.h>
    #include <shellapi.h>
    #include <propsys.h>
    #include <propkey.h>
    
    HRESULT MarkWindowAsUnpinnable(HWND hwnd)
    {
        IPropertyStore *pps;
        HRESULT hr = SHGetPropertyStoreForWindow(hwnd, IID_PPV_ARGS(&pps));
        if(SUCCEEDED(hr)) 
        {
            PROPVARIANT var;
            var.vt = VT_BOOL;
            var.boolVal = VARIANT_TRUE;
            hr = pps->SetValue(PKEY_AppUserModel_PreventPinning, var);
            pps->Release();
        }
        return hr;
    }
    
    ...
    case WM_CREATE:
        MarkWindowAsUnpinnable(hwnd);
        ...
    

    【讨论】:

      【解决方案2】:

      这可能与安装程序的执行方式有关。

      Inno Setup 制作的 mysetup.exe(默认情况下)只是一个加载程序,它将内部安装程序提取到临时文件夹并运行提升的内部安装程序。

      Windows 可能会以某种方式启发式地决定,从临时文件夹中固定以这种方式执行的应用程序没有任何意义。所以它隐藏了这个选项。

      请注意,如果您在 Inno Setup 中禁用加载程序,则会出现“pin”命令。

      [Setup]
      UseSetupLdr=no
      

      【讨论】:

      • 谢谢。它真的帮助了我!
      猜你喜欢
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多