山本ワールド
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 その他マスタボリュームの音量の変更
概要
MM(Multimedia Device)Device APIを用いてマスターボリュームの音量を取得及び変更するプログラムです。本プログラムはWindows Vista以降で使用可能です。
コマンドラインベースで引数に音量を0~1.0の範囲で指定します。引数を指定しない場合は、現在の音量を表示します。
以下に本プログラムの実行状況を記載します。
コマンドラインベースで引数に音量を0~1.0の範囲で指定します。引数を指定しない場合は、現在の音量を表示します。
以下に本プログラムの実行状況を記載します。
D:¥>volset 0.5 マスターボリューム 0.100000→0.500000
コンパイル方法
Visual C++ 2013 Express Win32コンソールアプリケーション
本プログラムの実行はWindows 32bit/64bitでVista以降
本プログラムの実行はWindows 32bit/64bitでVista以降
プログラムソースの概要
_tmain
MMDevice() APIはCOM(Component Object Model)ベースです。CoInitializeExによりCOMライブラリを初期化します。
CoCreateInstanceによりMMDeviceインターフェースIMMDeviceEnumerator* pEnumを取得します。
IMMDeviceEnumerator::GetDefaultAudioEndpointにより既定のマルチメディア出力デバイス(IMMDevice* pEndpoint)を取得します。
IMMDevice::Activateによりボリュームオブジェクトを作成します。
IAudioEndpointVolume::GetMasterVolumeLevelScalarによりボリュームの値を取得します。取得された値は0から1.0の範囲となります。
IAudioEndpointVolume::SetMasterVolumeLevelScalarによりボリュームの値を変更します。
ReleaseによりIAudioEndpointVolume,IMMDevice,IMMDeviceEnumeratorオブジェクトを解放します。
CoUninitializeによりCOMを解放します。
ソースコード
// マスターボリュームの取得・設定
// Windows Vista以降を対象
#include <windows.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <stdio.h>
#include <locale.h>
#include <tchar.h>
int _tmain(int argc, TCHAR** argv){
HRESULT hr;
IMMDeviceEnumerator *pEnum = NULL;
IMMDevice *pEndpoint = NULL;
IAudioEndpointVolume *pAudioEndVol = NULL;
#ifdef _DEBUG // デバック用
argc = 2;
TCHAR* str[] = { _TEXT("volset.exe"), _TEXT("0.1"), 0 };
argv = str;
#endif
if (2 != argc){
_tprintf(_TEXT("使い方¥nvolset ボリューム値¥n¥tボリューム値は0~1.0の範囲で指定します。¥n"));
}
// UNICODE文字を標準出力に正しく表示させるためにロケールを設定
_tsetlocale(LC_ALL, _TEXT(""));
hr = CoInitializeEx(0, COINIT_MULTITHREADED);
// MMDevice インターフェースを取得
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,IID_PPV_ARGS(&pEnum));
if (FAILED(hr)) {
CoUninitialize();
return 1;
}
// 既定のマルチメディア出力デバイスを取得
hr = pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pEndpoint);
if (FAILED(hr)) {
if (pEnum)
pEnum->Release();
CoUninitialize();
return 2;
}
// ボリュームオブジェクトを作成
hr = pEndpoint->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL, NULL, (void **)&pAudioEndVol);
if (FAILED(hr)) {
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 3;
}
// マスターボリュームの音量を取得(0.0~1.0)
float getVol;
hr = pAudioEndVol->GetMasterVolumeLevelScalar(&getVol);
if (FAILED(hr)) {
if (pAudioEndVol)
pAudioEndVol->Release();
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 4;
}
// マスターボリュームの音量を変更(0.0~1.0)
if (argc != 2){
_tprintf(_TEXT("現在のマスターボリュームの値(0~1.0) %f¥n"), double(getVol));
}else{
float setVol = (float)_ttof(argv[1]);
hr = pAudioEndVol->SetMasterVolumeLevelScalar(setVol, &GUID_NULL);
_tprintf(_TEXT("マスターボリューム %f→%f¥n"), double(getVol), double(setVol));
}
if (pAudioEndVol)
pAudioEndVol->Release();
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 0;
}
ソースファイルと実行ファイルのダウンロード
ZIPファイルに含まれるファイル
volset.cpp volset.exe
Copyright (C) 2012 山本ワールド All Rights Reserved.