山本ワールド
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以降で使用可能です。
コマンドラインベースで引数に何も指定しない場合は現在のミュートの状態を反転します。
ミュートする場合は/on、ミュートを解除する場合は/offをコマンドラインで指定します。
以下に本プログラムの実行状況を記載します。
コマンドラインベースで引数に何も指定しない場合は現在のミュートの状態を反転します。
ミュートする場合は/on、ミュートを解除する場合は/offをコマンドラインで指定します。
以下に本プログラムの実行状況を記載します。
D:¥>mute 設定 ミュートon
コンパイル方法
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::GetMuteによりミュートの状態を取得します
IAudioEndpointVolume::SetMuteによりミュートの状態を変更します。
ReleaseによりIAudioEndpointVolume,IMMDevice,IMMDeviceEnumeratorオブジェクトを解放します。
CoUninitializeによりCOMを解放します。
ソースコード
// マスターボリュームのミュートの状態をss取得・設定
// 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;
if (2 != argc){
_tprintf(_TEXT("使い方¥nmute /on 又は /off 又は無指定¥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;
}
// マスターボリュームのミュートの状態を取得
BOOL pbGetMute;
hr = pAudioEndVol->GetMute(&pbGetMute);
if (FAILED(hr)) {
if (pAudioEndVol)
pAudioEndVol->Release();
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 4;
}
// マスターボリュームのミュートの状態を変更
BOOL pbSetMute;
if (argc != 2){
pbSetMute = pbGetMute == TRUE ? FALSE : TRUE;
}else{
pbSetMute = _tcscmp(argv[1], _TEXT("/on")) == 0 ? TRUE : FALSE;
}
hr = pAudioEndVol->SetMute(pbSetMute, NULL);
_tprintf(_TEXT("設定 ミュート%s¥n"), pbGetMute == TRUE ? _TEXT("on") : _TEXT("off"));
if (pAudioEndVol)
pAudioEndVol->Release();
if (pEndpoint)
pEndpoint->Release();
if (pEnum)
pEnum->Release();
CoUninitialize();
return 0;
}
ソースファイルと実行ファイルのダウンロード
ZIPファイルに含まれるファイル
mute.cpp mute.exe
Copyright (C) 2012 山本ワールド All Rights Reserved.