1. 程式人生 > >Win10 設定取消快速啟動蘭圖示,C++版

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

這個目錄下有沒有你的快捷方式,這個目錄就是存放工作列快捷方式的。先判斷存在與否,存在再呼叫上面的函式即可,這個在做解除安裝程式的時候就用到。