Windows 7编程新特性Shell Library接口介绍

系统
目前看来很多Windows 7编程新特性都是围绕.NET平台进行的,毕竟都是微软一家的东西。

目前看来很多Windows 7编程新特性都是围绕.NET平台进行的,毕竟都是微软一家的东西。

  下文所用到的示例代码来源于微软一站式开发技术框架解决方案。你可以通过http://cfx.codeplex.com/Release/ProjectReleases.aspx下载到Windows7ShellLibrary相关的sample。其中包含C++、C#、VB.NET对ShellLibrary操作的示例代码:CppWin7ShellLibrary,C#Win7ShellLibrary,VBWin7ShellLibrary。

  为了帮助用户更加有效地对硬盘上的文件进行管理,Windows7中引入了新的文件管理方式:库(Library)。库自然演化自以往操作系统中MyDocuments文件夹这个概念。有了库,我们就可以将多个相关的文件夹组织到同一个库下,从而更快更便捷地管理和搜索数据。

  创建Windows Shell Library

  Windows 7提供了SHCreateLibrary API用来创建一个Shell Library:

  C++ CreateShellLibrary /**//*! * Create a new shell libraryunderthe users Libraries folder. if a library *with the same namealready exists, the new one overrides theexisting one. * * \parampwszLibraryName * The name of the shelllibrary to be created. */BOOLCreateShellLibrary( LPWSTR pwszLibraryName){/**////////////////////////////////////////////////////////////////////////////Create the shell library COM object. // IShellLibrary* pShellLib=NULL; HRESULT hr =SHCreateLibrary(IID_PPV_ARGS(&pShellLib)); if(FAILED(hr)) {_tprintf(_T(SHCreateLibrary failed to create theshell library )\ _T(COM object w/err 0x%08lx\n), hr);returnjiacubiaoj ijiacubiaoj ifalse;}/**///////////////////////////////////////////////////////////////////////////Save the new library under the users Libraries folder.//IShellItem* pSavedTo = NULL; hr=pShellLib->SaveInKnownFolder(FOLDERID_UsersLibraries,pwszLibraryName,LSF_OVERRIDEEXISTING, &pSavedTo); if (FAILED(hr)){_tprintf(_T(IShellLibrary::SaveInKnownFolder failed to save the)\ _T(library w/err 0x%08lx\n), hr); returnjiacubiaojijiacubiaoj ifalse;}/**////////////////////////////////////////////////////////////////////////////Clean up. // if (pShellLib != NULL)pShellLib->Release(); if(pSavedTo !=NULL) pSavedTo->Release(); return true;}/**////////////////////////////////////////////////////////////////////////Create a shell library. // using (ShellLibrary library =newShellLibrary(libraryName, true)) { }

  管理Windows Shell Library

  你可以通过调用SHShowManageLibraryUI API显示出Windows标准的ShellLibrary管理对话框。值得注意的是,在调用SHShowManageLibraryUI前请确保shelllibrary没有被以可写方式打开。否则在SHShowManageLibraryUI中对shelllibrary的修改将无法被保存。

  C++ ShowManageLibraryUI

  C++ ShowManageLibraryUI

  /**//*!

  * Shows the library management dialog box of thespec ifiedlibrary, which

  * enables users to manage the library folders and defaultsavelocation.

  *

  * \param pwszLibraryName

  * The name of the shell library

  */

  BOOL ShowManageLibraryUI( LPWSTR pwszLibraryName)

  {

  // Get the shell item that represents the library.

  IShellItem2* pShellItem=GetShellLibraryItem(pwszLibraryName);

  HRESULT hr = SHShowManageLibraryUI(pShellItem, NULL,

  LCppWin7ShellLibrary, LManage Library foldersandsettings,

  LMD_ALLOWUNINDEXABLENETWORKLOCATIONS);

  // Clean up

  if (pShellItem != NULL)

  pShellItem->Release();

  return SUCCEEDED(hr);

  }

  C# ShowManageLibraryUI

  // ShowManageLibraryUI requires that the library isnotcurrently

  // opened with write permission.

  ShellLibrary.ShowManageLibraryUI(libraryName, IntPtr.Zero,

  CSWin7ShellLibrary, Manage Library folders and settings,true);

  向Shell Library中添加文件夹

  SHAddFolderPathToLibrary可用来向指定的Shell Library中添加文件夹。

  C++ AddFolderToShellLibrary

  /**//*!

  * Add a folder to an existing shell library.

  *

  * \param pShellLib

  * The IShellLibrary interface of the shell library

  *

  * \param pwszFolderPath

  * The path of the folder to be added into the shell library

  *

  * \param bSaveLocation

  * if bSaveLocation is true, set thefolder as the save location ofthe shell

  * library

  */

  BOOL AddFolderToShellLibrary(IShellLibrary* pShellLib,

  LPWSTR pwszFolderPath, BOOL bSaveLocation)

  {

  HRESULT hr =SHAddFolderPathToLibrary(pShellLib,pwszFolderPath);

  if (FAILED(hr))

  {

  _tprintf(_T(SHAddFolderPathToLibrary failed to add a folder)\

  _T(to the shell library w/err 0x%08lx\n), hr);

  return jiacubiaoj ijiacubiaoj ifalse;

  }

  // Save the folder as the save location of the shell library

  if (bSaveLocation)

  {

  // Create shell item from folder path

  IShellItem2* pShellItemSaveFolder = NULL;

  hr = SHCreateItemFromParsingName(pwszFolderPath, 0,

  IID_PPV_ARGS(&pShellItemSaveFolder));

  if (FAILED(hr))

  {

  _tprintf(_T(SHCreateItemFromParsingName failed w/err ) \

  _T(0x%08lx\n), hr);

  return jiacubiaoj ijiacubiaoj ifalse;

  }

  // Set the folder as the save location

  pShellLib->SetDefaultSaveFolder(DSFT_DETECT,pShellItemSaveFolder);

  if (pShellItemSaveFolder != NULL)

  pShellItemSaveFolder->Release();

  if (FAILED(hr))

  {

  _tprintf(_T(IShellLibrary::SetDefaultSaveFolder failed ) \

  _T(w/err 0x%08lx\n), hr);

  return jiacubiaoj ijiacubiaoj ifalse;

  }

  }

  // Commit the change of the shell library

  pShellLib->Commit();

  return true;

  }

  C# AddFolderToShellLibrary

  using (ShellLibrary library =ShellLibrary.Load(libraryName,jiacubiaoj ijiacubiaoj ifalse))

  {

  /**//////////////////////////////////////////////////////////////////

  // Add a folder to the shell library.

  //

  // Add the folder to the shell library

  library.Add(folderPath);

  library.DefaultSaveFolder = folderPath;

  }

  枚举Shell Library中的文件夹

  IShellLibrary::GetFolders可用来得到Shell Library中的文件夹。

  删除一个Shell Library

  Windows 7编程新特性Shell Library接口介绍就到这里吧。

【编辑推荐】

  1. Windows 7多核评测:究竟快了多少?
  2. Linux之父Linus向Windows 7竖起大拇指
  3. 微软证实Windows 7下载版升级遇到问题
责任编辑:庞桂玉 来源: Zol
相关推荐

2009-09-04 15:26:20

Windows 7编程

2009-08-28 08:46:15

Windows 7防火墙

2011-04-19 18:42:54

Windows Emb特性

2010-06-04 18:19:24

Windows Emb微软嵌入式Windows Emb

2009-06-21 13:28:10

2010-11-24 16:36:02

Windows PhoUI设计Windows Pho

2013-03-25 11:34:27

Windows Blu

2021-04-30 19:53:41

Java表达式代码

2012-03-14 12:29:55

JavaPlay Framwo

2009-08-12 13:15:44

C#3.5新特性

2011-07-06 16:38:57

Xcode Preview

2009-08-18 17:03:49

C#3.5新特性

2010-10-08 09:54:30

IBM AIX 7

2009-05-25 08:56:26

Windows 7壁纸硬件

2013-04-09 12:59:21

WindowsPhon

2017-01-09 16:25:55

Android Shortcuts系统

2009-08-19 16:51:14

C# 4.0 dyna

2021-03-06 08:10:16

Redis6 Java架构分布式框架

2009-03-24 11:54:12

2009-12-23 18:58:51

Fedora 7
点赞
收藏

51CTO技术栈公众号