Win10 設定取消快速啟動蘭圖示,C++版
Win10對快速啟動欄的設定在介面上並沒有提供很好的方法,在網上找了一段是VBS和powershell寫的,特地轉成支援VC的版本:
void TaskbarPinWin10(LPCTSTR lpszFilePath,LPCTSTR lpszFileName)
{
do
{
TCHAR szVal[MAX_PATH]={0};
ULONG uValSize = MAX_PATH;
CRegKey regKey;
if (ERROR_SUCCESS!=regKey.Open(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CommandStore\\shell\\Windows.taskbarpin"),KEY_READ))
{
break;
}
if(ERROR_SUCCESS!=regKey.QueryStringValue(_T("ExplorerCommandHandler"),szVal,&uValSize))
{
break;
}
regKey.Close();
if (ERROR_SUCCESS!=regKey.Create(HKEY_CURRENT_USER,_T("SOFTWARE\\Classes\\*\\shell\\{:}")))
{
break;
}
if (ERROR_SUCCESS!=regKey.SetStringValue(_T("ExplorerCommandHandler"),szVal))
{
break;
}
regKey.Close();
IShellDispatch* pShellDisp = NULL;
Folder *pFolder;
FolderItem *pFolderItem;
CComBSTR stitle,str;
HRESULT hr = S_OK;
hr = ::CoCreateInstance( CLSID_Shell, NULL,
CLSCTX_SERVER, IID_IShellDispatch, (LPVOID*)&pShellDisp);
if(SUCCEEDED(hr))
{
hr = pShellDisp->NameSpace(CComVariant(lpszFilePath),&pFolder);
hr = pFolder->ParseName(CComBSTR(lpszFileName),&pFolderItem);
if (SUCCEEDED(hr))
{
pFolderItem->InvokeVerb(CComVariant(_T("{:}")));
}
hr = pShellDisp->Release();
pShellDisp = NULL;
}
if (ERROR_SUCCESS!=regKey.Open(HKEY_CURRENT_USER,_T("SOFTWARE\\Classes\\*\\shell"),KEY_READ|KEY_WRITE))
{
break;
}
regKey.RecurseDeleteKey(_T("{:}"));
regKey.Close();
} while (FALSE);
}
呼叫方法:
CString strLinkPath = _T("C:\\Users\\test\\Desktop");
CString strLinkName = _T("Google Chrome.lnk");
TaskbarPinWin10(strLinkPath ,strLinkName);
我是用快捷方式設定到快速啟動欄,當然你也可以直接用EXE,修改StrLinkPath為exe所在路徑,strLinkName為exe檔名即可。
這個方法呼叫一次如果工作列沒有我們的圖示就會自動設定上去,有的話會自動取消,如果你只想取消那你可以先列舉
%appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
這個目錄下有沒有你的快捷方式,這個目錄就是存放工作列快捷方式的。先判斷存在與否,存在再呼叫上面的函式即可,這個在做解除安裝程式的時候就用到。