2017-03-15 112 views
1

我正在爲一家公司的應用程序工作,他們要求如果應用程序固定到任務欄上,卸載應用程序時應該取消固定。如果我只是從quicklaunch \ user pinned \ taskbar中刪除圖標,那麼它會在任務欄上留下一個空白圖標。nsis - 卸載任務欄上的固定圖標

我需要以某種方式實際取消固定它。我遇到的唯一的事情是安裝winshell插件(http://nsis.sourceforge.net/WinShell_plug-in),然後調用IStartMenuPinnedList :: RemoveFromList(https://msdn.microsoft.com/en-us/library/windows/desktop/bb774817(v=vs.85).aspx

我寧願不安裝插件,如果我不需要。有沒有人有什麼建議?

回答

2

NSIS沒有本接口支持,所以你必須使用插件。如果您想要避開第三方插件(由我撰寫),則可以使用系統插件代替:

!include "LogicLib.nsh" 
!include "Win\COM.nsh" ; NSIS v3+ 

!macro UnpinShortcut lnkpath 
Push $0 
Push $1 
!insertmacro ComHlpr_CreateInProcInstance ${CLSID_StartMenuPin} ${IID_IStartMenuPinnedList} r0 "" 
${If} $0 P<> 0 
    System::Call 'SHELL32::SHCreateItemFromParsingName(ws, p0, g "${IID_IShellItem}", *p0r1)' "${lnkpath}" 
    ${If} $1 P<> 0 
     ${IStartMenuPinnedList::RemoveFromList} $0 '(r1)' 
     ${IUnknown::Release} $1 "" 
    ${EndIf} 
    ${IUnknown::Release} $0 "" 
${EndIf} 
Pop $1 
Pop $0 
!macroend 

Section Uninstall 
!insertmacro UnpinShortcut "$SMPrograms\MyApp.lnk" 
Delete "$SMPrograms\MyApp.lnk" 
SectionEnd