笔者在前段时间遇见这样的问题,自己打的软件安装包,安装到WIN7或WIN8系统上然后运行软件,并将软件锁定到任务栏,卸载软件后发现锁定在任务栏上的图标仍然存在,笔者经过一番查询发现网上讲这方面的资料并不多,在经过几天的不懈努力下,终于找到解决办法,再此整理出本文,供遇到相同问题的童靴参考。
1. 安装WIN8SDK,在工程中加载#include <ShObjIdl.h>头文件。
2.在工程中加入 如下函数:
void unpinShortcut(LPCWSTR path)
{
HRESULT hr = CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
IShellItem *pitem;
hr = SHCreateItemFromParsingName(path,
NULL,
IID_PPV_ARGS(&pitem));
//
// Do setup work here to remove the link, including the unpinning
// of the item.
//
if (SUCCEEDED(hr))
{
IStartMenuPinnedList *pStartMenuPinnedList;
hr = CoCreateInstance(CLSID_StartMenuPin,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pStartMenuPinnedList));
if (SUCCEEDED(hr))
{
hr = pStartMenuPinnedList->RemoveFromList(pitem);
pStartMenuPinnedList->Release();
}
pitem->Release();
}
else
wprintf(L"fail: %s\n", path);
}
CoUninitialize();
}
注意:函数参数所指的路径是exe文件的实际路径。
3. 在欲删除锁定图标的地方调用该接口。如:
const wchar_t STR[] = L"C:\\Program Files\\xxxxxx\\xxxxxxxx\\xxxxxxxx.exe";
LPCWSTR userSTR = STR;
unpinShortcut(userSTR);
就可以把锁定在任务栏上的软件图标删除。