当我通过Inno Setup构建一个.exe后,我运行.exe,当我右键单击我的应用程序的任务栏按钮时,我只能看到有一个项目“关闭窗口”。当我通过Visual Studio或Windows中的任何其他程序构建一个exe时,当我单击鼠标右键时,我可以看到有3个项目。1.我的应用程序的名称。1.将此程序固定到任务栏。1.关闭 windows 。我的问题是Inno Setup是如何做到这一点的,我如何通过编程实现它?
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.AppUserModel.PreventPinning:
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.AppUserModel.PreventPinning
#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); ...
1tuwyuhd2#
它可能与安装程序的执行方式有关。Inno Setup制作的mysetup.exe(默认情况下)只是一个加载程序,它将内部安装程序解压缩到临时文件夹并运行提升的内部安装程序。任务栏按钮属于内部安装程序,而不是加载程序。Windows可能会以某种启发式的方式决定,从临时文件夹中锁定以这种方式执行的应用程序没有任何意义。因此,它隐藏了该选项。请注意,如果在Inno Setup中执行disable the loader,则会出现“pin”命令。
mysetup.exe
[Setup] UseSetupLdr=no
2条答案
按热度按时间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.AppUserModel.PreventPinning
:1tuwyuhd2#
它可能与安装程序的执行方式有关。
Inno Setup制作的
mysetup.exe
(默认情况下)只是一个加载程序,它将内部安装程序解压缩到临时文件夹并运行提升的内部安装程序。任务栏按钮属于内部安装程序,而不是加载程序。Windows可能会以某种启发式的方式决定,从临时文件夹中锁定以这种方式执行的应用程序没有任何意义。因此,它隐藏了该选项。
请注意,如果在Inno Setup中执行disable the loader,则会出现“pin”命令。