none
ActiveXにて、windows7のライブラリ機能に登録されたフォルダ内のファイルを参照する RRS feed

  • 質問

  • [概要]
      windows7の新機能でライブラリ機能があると思います。
      複数のフォルダを1つのフォルダのように見せる仮想フォルダ機能かと思います。
     
      このライブラリ機能に登録されたフォルダ内のファイル一覧を
      クライアントPCにインストールされたActiveXに、
      表示したいと考えております。

    [質問]
      ActiveXにて、ライブラリ登録されたフォルダ内の
      ファイルパス一覧の検索は可能でしょうか?
     
      また、ファイルパス一覧の検索が難しい場合は、ライブラリ登録されている
      フォルダパスの一覧を取得する事はできないでしょうか?
      フォルダパスが取得できれば、ActiveXにて順次検索することで対応は出来ると
      考えております。

      以上、質問は2点となっています。
      ①ライブラリに登録されているファルダ内のファイルパス一覧を取得する方法はあるか?
      ②ライブラリに登録されているフォルダパス一覧を取得する方法はあるか?
      
     どなたか分かる方、ご教示のほどよろしくお願い致します。

    2011年2月16日 6:57

回答

すべての返信

  • 次の記事が参考になると思います。

     Windows 7 徹底解剖: ライブラリの紹介
     http://msdn.microsoft.com/ja-jp/magazine/dd861346.aspx

    IShellLibrary インタフェースを使うのかな。

     IShellLibrary Interface (Windows)
     http://msdn.microsoft.com/en-us/library/dd391719(VS.85).aspx
    • 回答としてマーク 山本春海 2011年3月2日 7:39
    2011年2月16日 7:08
  • ライブラリの実体は拡張子 .library-ms の XML ファイルで、通常、

    C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Libraries

    にあります。が、これは環境によって変わるので、

    ::{031E4825-7B94-4DC3-B131-E946B44C8DD5}

    というパスでアクセスできます。ためしに、エクスプローラーのアドレスバーに

    ::{031E4825-7B94-4DC3-B131-E946B44C8DD5}

    と入力すると「ライブラリ」フォルダが開くのが確認できると思います。

    例えば、「ピクチャ」ライブラリでしたら、実体のファイルは Pictures.library-ms ですが、C++ でしたら、次のようなコーディングで、ライブラリに登録されているフォルダをリストアップできます。

    #include <windows.h>
    #include <Shobjidl.h>
    #include <shellapi.h>

    #include <stdio.h>
    #include <tchar.h>

    ・・・

     IShellLibrary *psl;

     LPTSTR pszPath = _T("::{031E4825-7B94-4DC3-B131-E946B44C8DD5}\\Pictures.library-ms");

     CoInitialize( NULL );

     HRESULT hResult = SHLoadLibraryFromParsingName( pszPath, STGM_READ, IID_PPV_ARGS( &psl ) );
     if( S_OK == hResult ) {
      IShellItemArray *psia;
      hResult = psl->GetFolders( LFF_FORCEFILESYSTEM, IID_IShellItemArray, ( LPVOID *)&psia );
      if( S_OK == hResult ) {
       IEnumShellItems *pesi;
       hResult = psia->EnumItems( &pesi );
       if( S_OK == hResult ) {
        IShellItem *psi;
        ULONG ulFetch;
        hResult = pesi->Next( 1, &psi, &ulFetch );
        while( S_OK == hResult ) {
         LPTSTR pszBuffer;
         psi->GetDisplayName( SIGDN_FILESYSPATH, &pszBuffer );
         _tprintf( TEXT("%s\n"), pszBuffer );
         hResult = pesi->Next( 1, &psi, &ulFetch );
        }
        pesi->Release();
       }
       psia->Release();
      }
     }

    2011年2月19日 16:02
  • ライブラリの実体は拡張子 .library-ms の XML ファイルで、通常、

    C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Libraries

    にあります。が、これは環境によって変わるので、

    ::{031E4825-7B94-4DC3-B131-E946B44C8DD5}

    というパスでアクセスできます。


    ライブラリ各項目 (ドキュメント、ピクチャ、...) にも FOLDERID が規定されていますので、GUID を直接使用すべきでないと思います。

     KNOWNFOLDERID (Windows)
     http://msdn.microsoft.com/en-us/library/dd378457(VS.85).aspx

    一覧を取得したいライブラリの FOLDERID を使って SHLoadLibraryFromKnownFolder すべきではないかと。
    2011年2月21日 1:08