開発環境 Microsoft Visual Studio Community 2015
実行環境 Windows 10 Home (64bit)
プロジェクトの種類 Win32 Project
プロジェクト名 MasterMute
アプリケーションの種類 Windows application
追加のオプション Empty project, SDL checks

プロジェクトのプロパティ
C/C++>Code Generation>Runtime Library:Multi-threaded (/MT)

MasterMute.exe

参考

MasterMute.cpp
#pragma comment(lib, "winmm")
 
#include <Windows.h>
#include <math.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include "Resource.h"
 
#define SAFE_RELEASE(punk) if (punk) { punk->Release(); punk = NULL; }
 
#define TONE_MSEC 1000
#define SAMPLE_RATE 8000
#define DATA_LEN (SAMPLE_RATE * TONE_MSEC / 1000)
 
//
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
//
IMMDeviceEnumerator *pEnum;
IMMDevice *pEndpoint;
IAudioEndpointVolume *pAudioEndVol;
 
HWAVEOUT hwo;
WAVEHDR wh = { 0 };
BYTE data[DATA_LEN];
 
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
	HRESULT hr = CoInitialize(NULL);
 
	hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, IID_PPV_ARGS(&pEnum));
	hr = pEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pEndpoint);
	hr = pEndpoint->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void **)&pAudioEndVol);
 
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
 
	SAFE_RELEASE(pAudioEndVol);
	SAFE_RELEASE(pEndpoint);
	SAFE_RELEASE(pEnum);
 
	CoUninitialize();
	return 0;
}
 
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	INT_PTR nRet = TRUE;
	MMRESULT mmr;
 
	switch (uMsg) {
	case MM_WOM_OPEN:
		wh.lpData = (LPSTR)data;
		wh.dwBufferLength = DATA_LEN;
		mmr = waveOutPrepareHeader(hwo, &wh, sizeof wh);
		wh.dwFlags |= WHDR_BEGINLOOP | WHDR_ENDLOOP;
		wh.dwLoops = 5;
		mmr = waveOutWrite(hwo, &wh, sizeof wh);
		break;
	case MM_WOM_DONE:
		mmr = waveOutReset(hwo);
		mmr = waveOutUnprepareHeader(hwo, &wh, sizeof wh);
		mmr = waveOutClose(hwo);
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case IDC_BEEP:
			WAVEFORMATEX wfx;
			wfx.wFormatTag = WAVE_FORMAT_PCM;
			wfx.nChannels = 1;
			wfx.nSamplesPerSec = SAMPLE_RATE;
			wfx.nAvgBytesPerSec = SAMPLE_RATE;
			wfx.nBlockAlign = 1;
			wfx.wBitsPerSample = 8;
			wfx.cbSize = 0;
			mmr = waveOutOpen(&hwo, WAVE_MAPPER, &wfx, (DWORD_PTR)hDlg, NULL, CALLBACK_WINDOW);
			break;
		case IDC_MUTE:
			BOOL bMute;
			HRESULT hr;
			hr = pAudioEndVol->GetMute(&bMute);
			hr = pAudioEndVol->SetMute(!bMute, NULL);
			break;
		case IDCANCEL:
			EndDialog(hDlg, IDCANCEL);
			break;
		}
		break;
	case WM_INITDIALOG:
		for (int i = 0; i < DATA_LEN; i++) {
			double t = fmod(i * 440.0 / SAMPLE_RATE, 1.0);
			data[i] = 128 + (t < 0.5 ? -1 : 1) * 16;
		}
		nRet = TRUE;
		break;
	case WM_CLOSE:
		EndDialog(hDlg, 0);
		break;
	default:
		nRet = FALSE;
	}
 
	return nRet;
}
 

resource.h
#define IDD_MAIN	100
 
#define IDC_BEEP	1000
#define IDC_MUTE	1001
 

MasterMute.rc
#include <winres.h>
#include "resource.h"
 
IDD_MAIN DIALOGEX 100, 100, 150, 60
STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION "Master Mute"
FONT 9, "MS Pゴシック"
BEGIN
	PUSHBUTTON	"Beep", IDC_BEEP, 50, 10, 50, 15
	PUSHBUTTON	"Mute", IDC_MUTE, 50, 35, 50, 15
//	PUSHBUTTON	"Cancel", IDCANCEL, 264, 176, 48, 16
END
 
最終更新:2016年05月18日 15:51
添付ファイル