Windows 7開發:Shell 庫

來源:互聯網
上載者:User

2.編譯並測試:

a.開啟一個命令列視窗,並且將目錄(cd)切換到SLUtil.exe所在的位置。

b.開啟緊鄰命令列視窗的庫Shell檔案夾,你將會看到你使用SLUtil工具所做的變 化.

c.在命令列視窗中,測試SLUtil命令。

d.試著為你的MyLib庫使用一個與Pictures庫相同的表徵圖。

e.試著將你的庫在檔案管理面板中鎖定和解鎖。

f.改變庫的預設儲存位置,將這個位置移到檔案系統中另外的位置,並且測試預設的存 儲位置是否解決了這個變化。

任務 6 –添加FolderType 命令

每個庫都有一個檔案夾模板類型。這個類型定義了Shell庫視窗的樣子和感覺,例如,圖 片和音樂就有不同的模板。IShellLibrary SetFolderType()方法則使用GUID的方式來表示 檔案夾的類型id。GetFolderType()方法則能返回當前檔案夾的id。預設情況,使用者建立的 庫,都是一般檔案夾類型。

為了讓使用者使用文本類型而不是使用GUID,我們需要使用一個協助類。 CfolderTypeIdNameConverter這個類知道如何將Pictures, Music, Documents, Videos, 和 Generic轉換成相應的FOLDERTYPEID_*,同樣,反之亦然。同時,這個方法還知道取名稱的 一部分,比如vid 就是 Videos。這些都將使設定庫檔案夾的類型變得簡單:SLUtil FolderType MyLib doc

1.向項目中添加FolderTypeIdNameConverter.h 和 FolderTypeIdNameConverter.cpp文 件。你可以從Starter檔案夾中找到它們。

2.添加 #include "FolderTypeIdNameConverter.h"

3.添加下面的程式碼片段,來實現FolderType命令:

C++ (SLUtil.cpp)

//Set or get the library's folder template
void FolderType(const CCommand &command, const vector<PCWSTR>  &arguments)
{
                 IShellLibrary *shellLibrary = NULL;
                 HRESULT hr = S_OK;
                 FOLDERTYPEID folderTypeId;

                 CFolderTypeIdNameConverter  converter;

                 //Show current folder type
                 if (arguments.size() == 1)
                 {
                                 //Open  library with read permissions
                                 IShellLibrary  *shellLibrary =
                                                                                   OpenLibrary(L"FolderType", arguments[0]);

                                 hr =  shellLibrary->GetFolderType(&folderTypeId);
                                 if (FAILED (hr))
                                 {
                                                  wcerr <<
                                                     L"FolderType: Can't get the library's folder  template."
                                                                                                                                                                          << endl;
                                                  exit(5);
                                 }
                                 wcout  << L"Library " << arguments[0] << L": Folder template  is: "                                                 << converter.GetFolderTypeIdName(folderTypeId)  << endl;
                 }
                 else //Set the current folder type
                 {
                                 //Open  library with read/write permissions
                                 IShellLibrary  *shellLibrary =
                                                    OpenLibrary(L"FolderType", arguments[0],  false);

                                 hr =  converter.GetFolderTypeIdFromName(arguments[1],
                                                                                                                                                    &folderTypeId);
                                 if (FAILED (hr))
                                 {
                                                  wcerr << L"FolderType: Invalida folder template  name." <<
                                                                                                                                                                                     endl;
                                                  exit(6);
                                 }

                                 hr =  shellLibrary->SetFolderType(folderTypeId);
                                 if (FAILED (hr))
                                 {
                                                  wcerr <<
                                                     L"FolderType: Can't set the library's folder  template,"
                                                                                                                                                                          << endl;
                                                  exit(7);
                                 }
                                 //Commit the  library changes
                                 shellLibrary ->Commit();
                 }
                 if (shellLibrary != NULL)
                                 shellLibrary ->Release();
}
COMMAND(L"FolderType", 
    L"SLUtil FolderType LibraryName  [Documents|Pictures|Music|Videos|Generic]",
    L"Set or get the library's folder template", L"SLUtil MyLib  Documents", 1,
    FolderType);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.