概要

指定されたWMAファイルのタイトルを表示します。

コマンドラインで動作します。リダイレクトでファイルに落とすことが可能です。

エクスプローラのプロパティが上図の場合のファイルを本プログラムで実行すると以下の結果が得られます。


wmget 1.wma
"1.wma","MENUEET"

ソースコード

UNICODEに対応し、32bit/64bit対応です。

// WMAファイルのタイトル情報を取得する
// Visual C++ 2008 UNICODE  32bit/64bit
// 2014/3/23
// 使い方
//   コマンドラインで下記の様に入力
//   wmget ファイル名

#include <windows.h>
#include <stdio.h>
#include <wmsdk.h>
#include <locale.h>
#include <tchar.h>

#pragma comment(lib,"wmvcore.lib")

int _tmain(int argc,TCHAR** argv){
        
        _tsetlocale(LC_ALL,_TEXT(""));

        IWMMetadataEditor* pEditor=NULL;

        HRESULT hr;
        IWMHeaderInfo3* pHeaderInfo=NULL;

        hr=WMCreateEditor(&pEditor);        // オブジェクトを作成

        hr=pEditor->Open(argv[1]);
        if(FAILED(hr))
                return hr;

        pEditor->QueryInterface(IID_IWMHeaderInfo3,(void**)&pHeaderInfo);

        WORD wStreamNum = 0;
        WMT_ATTR_DATATYPE Type;
        WORD cbLength;

        TCHAR* name=_TEXT("Title");
        Type=WMT_TYPE_STRING;
        //      タイトルの文字数を取得
        hr=pHeaderInfo->GetAttributeByName(&wStreamNum,name,&Type, NULL, &cbLength );
        if(FAILED(hr))
                return hr;
        TCHAR *pwszTitle = (WCHAR *) new BYTE[ cbLength ];
        if( !pwszTitle )
                return( E_OUTOFMEMORY );
        //      タイトルを取得
        hr = pHeaderInfo->GetAttributeByName( &wStreamNum, name, &Type,(BYTE *) pwszTitle, &cbLength );
        if( FAILED( hr ) )
                return( hr );

        _tprintf(_TEXT("\"%s\",\"%s\"\n"),argv[1],pwszTitle);
        pHeaderInfo->Release();
        pEditor->Close();
}

ソース・実行ファイル