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

o4hqfura  于 2022-11-26  发布在  Windows
关注(0)|答案(2)|浏览(192)

当我通过Inno Setup构建一个.exe后,我运行.exe,当我右键单击我的应用程序的任务栏按钮时,我只能看到有一个项目“关闭窗口”。当我通过Visual Studio或Windows中的任何其他程序构建一个exe时,当我单击鼠标右键时,我可以看到有3个项目。
1.我的应用程序的名称。
1.将此程序固定到任务栏。
1.关闭 windows 。
我的问题是Inno Setup是如何做到这一点的,我如何通过编程实现它?

ubof19bj

ubof19bj1#

发件人:
How do I prevent users from pinning my program to the taskbar? [https://devblogs.microsoft.com/oldnewthing/20110601-00/?p=10523](https://devblogs.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);
    ...
1tuwyuhd

1tuwyuhd2#

它可能与安装程序的执行方式有关。
Inno Setup制作的mysetup.exe(默认情况下)只是一个加载程序,它将内部安装程序解压缩到临时文件夹并运行提升的内部安装程序。任务栏按钮属于内部安装程序,而不是加载程序。
Windows可能会以某种启发式的方式决定,从临时文件夹中锁定以这种方式执行的应用程序没有任何意义。因此,它隐藏了该选项。
请注意,如果在Inno Setup中执行disable the loader,则会出现“pin”命令。

[Setup]
UseSetupLdr=no

相关问题