Inno Setup如何在任务栏菜单中隐藏“pin”命令

时间:2017-12-23 12:30:44

标签: windows winapi inno-setup

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

  1. 我的应用的名称。
  2. 将此程序固定到任务栏。
  3. 关闭窗口。
  4. 我的问题是Inno Setup如何做到这一点,我如何以编程方式实现它?

2 个答案:

答案 0 :(得分:6)

自:
如何阻止用户将我的程序固定到任务栏? System.App­User­Model.Prevent­Pinning

直接在程序中使用PHP - XML Response into Array

#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);
    ...

答案 1 :(得分:3)

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

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

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

请注意,如果您在Inno Setup中禁用了加载程序,那么&#34; pin&#34;命令出现。

[Setup]
UseSetupLdr=no