Welcome

首页 / 软件开发 / .NET编程技术 / Windows 7开发:Shell 库 - 本机(动手实验)(中)

Windows 7开发:Shell 库 - 本机(动手实验)(中)2011-05-06 MSDN 3.编译并测试结果:

a.清空命令行变量。

b.打开一个命令行窗口,并且将目录(cd)改变到SLUtil.exe文件的所在位置(… debugSLUtil.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);