開発環境 |
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