山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他WMAファイルタイトル変更プログラム
概要
指定されたWMAファイルのタイトルを変更します。
コマンドラインで動作します。
エクスプローラのプロパティが上図の場合のファイルを本プログラムで実行すると下図の結果が得られます。
wmchg 1.wma "FANTAISIE IMPROMPTU"
ソースコード
UNICODEに対応し、32bit/64bit対応です。
// WMAファイルのタイトル情報を取得し変更する
// Visual C++ 2008 UNICODE 32bit/64bit
// 2014/3/23
// 使い方
// コマンドラインで下記の様に入力
// wmchg ファイル名 タイトル名
#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]);
pEditor->QueryInterface(IID_IWMHeaderInfo3,(void**)&pHeaderInfo);
WORD wStreamNum = 0;
WMT_ATTR_DATATYPE Type;
WORD cbLength;
TCHAR* getname=_TEXT("Title");
Type=WMT_TYPE_STRING;
// タイトルの文字数を取得
hr=pHeaderInfo->GetAttributeByName(&wStreamNum,getname,&Type, NULL, &cbLength );
if(FAILED(hr))
return hr;
TCHAR *pwszTitle = (WCHAR *) new BYTE[ cbLength ];
if( !pwszTitle ){
return( E_OUTOFMEMORY );
}
// タイトルを取得
hr = pHeaderInfo->GetAttributeByName( &wStreamNum, getname, &Type,(BYTE *) pwszTitle, &cbLength );
if( FAILED( hr ) )
return( hr );
_tprintf(_TEXT("%s\n"),pwszTitle);
cbLength=(WORD)_tcslen(argv[2])*sizeof(TCHAR);
// タイトルを変更
hr=pHeaderInfo->SetAttribute(wStreamNum,TEXT("Title"),Type, (BYTE*)argv[2], cbLength );
pHeaderInfo->Release();
// 変更を保存
pEditor->Flush();
}
ソース・実行ファイル
Visual C++ 2008用 ソース・実行ファイルのダウンロード
Copyright (C) 2012 山本ワールド All Rights Reserved.