Windows 7開發:Shell 庫

來源:互聯網
上載者:User

3.編譯並測試結果:

a.清空命令列變數。

b.開啟一個命令列視窗,並且將目錄(cd)改變到SLUtil.exe檔案的所在位置(… \debug\SLUtil.exe)

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

d.在命令列中嘗試下面的SLUtil命令:

i.SLUtil ?

ii.SLUtil Create NewLibrary

iii.SLUtil AddFolder NewLibrary C:\Users

iv.SLUtil RemoveFolder NewLibrary C:\Users

注意 :

由於解譯器能夠找到最為匹配的命令,所以你可以使用“SLUtil Cr Lib”這種指令去創 建一個庫,或者使用“SLUtil Add Lib C:\”指令去添加一個檔案夾。嘗試一下。

任務 4 –添加刪除和重新命名命令

刪除和重新命名一個庫,是刪除或重新命名與其一致的*.library-ms檔案的庫的一系列操作 。要刪除一個檔案,我們可以使用SHFileOperation() 或 DeleteFile()。第一種方法可以 同時將庫清除,而且後續的操作更加簡單,所以我們將使用這個方法。如果要對檔案 進行重新命名,我們可以再次使用基於檔案系統的API,但是我們也可以使用拷貝庫的方式, 然後將原先的執行個體刪除掉。

1.向SLUtil.cpp檔案中添加下面的代碼:

C++ (SLUtil.cpp)

//Delete a library
void Delete(const CCommand &command, const vector<PCWSTR>  &arguments)
{
                 PWSTR libraryFullPath;
                 HRESULT hr =  GetLibraryFromLibrariesFolder(arguments[0], NULL, false,
                                                                                                                                                     &libraryFullPath);

                 if (FAILED(hr))
                 {
                                 wcerr  << L"Delete: Can't get library." << endl;
                                 exit(4);
                 }
                 //We use delete file with the library  file-system based full path
                 DeleteFile(libraryFullPath);
                 CoTaskMemFree(libraryFullPath);
}
COMMAND(L"Delete", L"SLUtil Delete LibraryName", L"Delete a library",  L"SLUtil Delete MyLib", 1, Delete);

//Rename an existing library
void Rename(const CCommand &command, const vector<PCWSTR>  &arguments)
{
                 IShellLibrary *shellLibrary = OpenLibrary (L"Rename", arguments[0]);
                 IShellItem *savedTo = NULL;

                 //Save a new copy of the library under  the user's Libraries folder with
                 //the new name.
                 HRESULT hr = shellLibrary- >SaveInKnownFolder(FOLDERID_UsersLibraries,
                                                                                    arguments[1], LSF_MAKEUNIQUENAME, &savedTo);
                 if (FAILED(hr))
                 {
                                 wcerr  << L"Rename: Can't save library." << endl;
                                 exit(5);
                 }

                 if (shellLibrary != NULL)
                                 shellLibrary ->Release();
                 if (savedTo != NULL)
                                 savedTo- >Release();

                 //Create parameters to delete the old  copy of the library
                 vector<PCWSTR> deleteArguments;
                 deleteArguments.push_back(arguments [0]);

                 //Call the delete command
                 Delete(command, deleteArguments);
}
COMMAND(L"Rename", L"SLUtil Rename OldName NewName", L"Rename a  library", L"SLUtil Rename MyLib MyLibNewName", 2, Rename);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.