「C言語/C++/MasterVolume」の編集履歴(バックアップ)一覧はこちら

C言語/C++/MasterVolume - (2012/10/02 (火) 12:51:45) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

|開発環境|Microsoft Visual C++ 2010 Express (SP1)| |実行環境|Microsoft Windows XP Home Edition (SP3)| |プロジェクトの種類|Win32 プロジェクト| |プロジェクト名|MasterVolume| |アプリケーションの種類|Windows アプリケーション| |追加のオプション|空のプロジェクト| |文字セット|Unicode| MasterVolume.cpp #highlight(cpp){{ #pragma comment(lib, "winmm.lib") #include <Windows.h> #include <CommCtrl.h> #include <tchar.h> #include "resource.h" // 関数プロトタイプ宣言 int GetIniFileName(void); int InitApp(void); void TermApp(void); INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnHScroll(void); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void WriteIniFileInt(LPCTSTR szSect, LPCTSTR szKey, int iValue); void SetVolume(int iPos); // 外部変数 TCHAR g_szIniFile[_MAX_PATH]; HWND g_hVolume; HWND g_hSlider; HMIXER g_hmx; DWORD g_dwControlID; DWORD g_dwMin; DWORD g_dwMax; DWORD g_dwVol; //============================================================================== int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { if (GetIniFileName()) { return 0; } if (InitApp()) { return 0; } DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc); TermApp(); return 0; } //------------------------------------------------------------------------------ int GetIniFileName(void) { TCHAR szPath[_MAX_PATH]; TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFName[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; if (GetModuleFileName(NULL, szPath, _countof(szPath)) == 0) { return -1; } if (_tsplitpath_s(szPath, szDrive, szDir, szFName, szExt) != 0) { return -1; } if (_tmakepath_s(g_szIniFile, szDrive, szDir, szFName, _T("ini")) != 0) { return -1; } return 0; } //------------------------------------------------------------------------------ int InitApp(void) { MIXERLINE mxl; MIXERCONTROL mxctrl; MIXERLINECONTROLS mxlc; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MMRESULT mr; // ミキサーデバイス mr = mixerOpen(&g_hmx, 0, (DWORD_PTR)NULL, 0, MIXER_OBJECTF_MIXER); if (mr != MMSYSERR_NOERROR) { return -1; } // マスターボリュームID mxl.cbStruct = sizeof (MIXERLINE); mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; mr = mixerGetLineInfo((HMIXEROBJ)g_hmx, &mxl, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE); mxlc.cbStruct = sizeof (MIXERLINECONTROLS); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof (MIXERCONTROL); mxlc.pamxctrl = &mxctrl; mr = mixerGetLineControls((HMIXEROBJ)g_hmx, &mxlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE); g_dwControlID = mxctrl.dwControlID; g_dwMin = mxctrl.Bounds.dwMinimum; g_dwMax = mxctrl.Bounds.dwMaximum; // 現在の音量 mxcd.cbStruct = sizeof (MIXERCONTROLDETAILS); mxcd.dwControlID = g_dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof (MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; mr = mixerGetControlDetails((HMIXEROBJ)g_hmx, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE); g_dwVol = mxcdVolume.dwValue; return 0; } //------------------------------------------------------------------------------ void TermApp(void) { MMRESULT mr; mr = mixerClose(g_hmx); } //============================================================================== INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR iRet = TRUE; // メッセージを処理した switch (uMsg) { case WM_HSCROLL: OnHScroll(); break; case WM_INITDIALOG: OnInitDialog(hDlg); iRet = TRUE; // SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE: EndDialog(hDlg, IDOK); break; case WM_DESTROY: OnDestroy(hDlg); break; default: iRet = FALSE; // メッセージを処理しなかった } return iRet; } //------------------------------------------------------------------------------ void OnHScroll(void) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MMRESULT mr; int iPos; iPos = SendMessage(g_hSlider, TBM_GETPOS, 0, 0); SetVolume(iPos); mxcdVolume.dwValue = g_dwMax * iPos / 100; mxcd.cbStruct = sizeof (MIXERCONTROLDETAILS); mxcd.dwControlID = g_dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof (MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; mr = mixerSetControlDetails((HMIXEROBJ)g_hmx, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE); } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { int iX, iY; int iPos; iX = GetPrivateProfileInt(_T("General"), _T("x"), 0, g_szIniFile); iY = GetPrivateProfileInt(_T("General"), _T("y"), 0, g_szIniFile); SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE); g_hVolume = GetDlgItem(hDlg, IDC_VOLUME); g_hSlider = GetDlgItem(hDlg, IDC_SLIDER); SendMessage(g_hSlider, TBM_SETRANGE, FALSE, MAKELPARAM(0, 100)); iPos = 100 * g_dwVol / g_dwMax; SendMessage(g_hSlider, TBM_SETPOS, TRUE, iPos); SetVolume(iPos); } //------------------------------------------------------------------------------ void OnDestroy(HWND hDlg) { RECT rc; if (IsIconic(hDlg)) { return; } GetWindowRect(hDlg, &rc); WriteIniFileInt(_T("General"), _T("x"), rc.left); WriteIniFileInt(_T("General"), _T("y"), rc.top); } //------------------------------------------------------------------------------ void WriteIniFileInt(LPCTSTR szSect, LPCTSTR szKey, int iValue) { TCHAR szBuf[16]; _stprintf_s(szBuf, _T("%d"), iValue); WritePrivateProfileString(szSect, szKey, szBuf, g_szIniFile); } //------------------------------------------------------------------------------ void SetVolume(int iPos) { TCHAR szBuf[16]; _stprintf_s(szBuf, _T("%d"), iPos); SetWindowText(g_hVolume, szBuf); } }} resource.h #highlight(c){{ #define IDC_STATIC -1 #define IDD_DIALOG 100 #define IDC_VOLUME 1000 #define IDC_SLIDER 1001 }} MasterVolume.rc #highlight(c){{ // resource script #include <windows.h> #include "resource.h" IDD_DIALOG DIALOGEX 0, 0, 240, 48 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "MasterVolume" FONT 9, "MS Pゴシック" BEGIN LTEXT "0",IDC_STATIC,4,4,20,8 LTEXT "100",IDC_STATIC,200,4,20,8 LTEXT "",IDC_VOLUME,100,4,20,8 CONTROL "",IDC_SLIDER,"msctls_trackbar32", TBS_BOTH | WS_TABSTOP,4,16,200,24 END }}
|開発環境|Microsoft Visual C++ 2010 Express (SP1)| |実行環境|Microsoft Windows XP Home Edition (SP3)| |プロジェクトの種類|Win32 プロジェクト| |プロジェクト名|MasterVolume| |アプリケーションの種類|Windows アプリケーション| |追加のオプション|空のプロジェクト| |文字セット|Unicode| Windows XPではマスターボリュームの変更はできたが、 Windows 7ではこのアプリケーションのみ変更できた。 MasterVolume.cpp #highlight(cpp){{ #pragma comment(lib, "winmm.lib") #include <Windows.h> #include <CommCtrl.h> #include <tchar.h> #include "resource.h" // 関数プロトタイプ宣言 int GetIniFileName(void); int InitApp(void); void TermApp(void); INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnHScroll(void); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void WriteIniFileInt(LPCTSTR szSect, LPCTSTR szKey, int iValue); void SetVolume(int iPos); // 外部変数 TCHAR g_szIniFile[_MAX_PATH]; HWND g_hVolume; HWND g_hSlider; HMIXER g_hmx; DWORD g_dwControlID; DWORD g_dwMin; DWORD g_dwMax; DWORD g_dwVol; //============================================================================== int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { if (GetIniFileName()) { return 0; } if (InitApp()) { return 0; } DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DialogProc); TermApp(); return 0; } //------------------------------------------------------------------------------ int GetIniFileName(void) { TCHAR szPath[_MAX_PATH]; TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFName[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; if (GetModuleFileName(NULL, szPath, _countof(szPath)) == 0) { return -1; } if (_tsplitpath_s(szPath, szDrive, szDir, szFName, szExt) != 0) { return -1; } if (_tmakepath_s(g_szIniFile, szDrive, szDir, szFName, _T("ini")) != 0) { return -1; } return 0; } //------------------------------------------------------------------------------ int InitApp(void) { MIXERLINE mxl; MIXERCONTROL mxctrl; MIXERLINECONTROLS mxlc; MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MMRESULT mr; // ミキサーデバイス mr = mixerOpen(&g_hmx, 0, (DWORD_PTR)NULL, 0, MIXER_OBJECTF_MIXER); if (mr != MMSYSERR_NOERROR) { return -1; } // マスターボリュームID mxl.cbStruct = sizeof (MIXERLINE); mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; mr = mixerGetLineInfo((HMIXEROBJ)g_hmx, &mxl, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE); mxlc.cbStruct = sizeof (MIXERLINECONTROLS); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof (MIXERCONTROL); mxlc.pamxctrl = &mxctrl; mr = mixerGetLineControls((HMIXEROBJ)g_hmx, &mxlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE); g_dwControlID = mxctrl.dwControlID; g_dwMin = mxctrl.Bounds.dwMinimum; g_dwMax = mxctrl.Bounds.dwMaximum; // 現在の音量 mxcd.cbStruct = sizeof (MIXERCONTROLDETAILS); mxcd.dwControlID = g_dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof (MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; mr = mixerGetControlDetails((HMIXEROBJ)g_hmx, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE); g_dwVol = mxcdVolume.dwValue; return 0; } //------------------------------------------------------------------------------ void TermApp(void) { MMRESULT mr; mr = mixerClose(g_hmx); } //============================================================================== INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR iRet = TRUE; // メッセージを処理した switch (uMsg) { case WM_HSCROLL: OnHScroll(); break; case WM_INITDIALOG: OnInitDialog(hDlg); iRet = TRUE; // SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE: EndDialog(hDlg, IDOK); break; case WM_DESTROY: OnDestroy(hDlg); break; default: iRet = FALSE; // メッセージを処理しなかった } return iRet; } //------------------------------------------------------------------------------ void OnHScroll(void) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED mxcdVolume; MMRESULT mr; int iPos; iPos = SendMessage(g_hSlider, TBM_GETPOS, 0, 0); SetVolume(iPos); mxcdVolume.dwValue = g_dwMax * iPos / 100; mxcd.cbStruct = sizeof (MIXERCONTROLDETAILS); mxcd.dwControlID = g_dwControlID; mxcd.cChannels = 1; mxcd.cMultipleItems = 0; mxcd.cbDetails = sizeof (MIXERCONTROLDETAILS_UNSIGNED); mxcd.paDetails = &mxcdVolume; mr = mixerSetControlDetails((HMIXEROBJ)g_hmx, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE); } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { int iX, iY; int iPos; iX = GetPrivateProfileInt(_T("General"), _T("x"), 0, g_szIniFile); iY = GetPrivateProfileInt(_T("General"), _T("y"), 0, g_szIniFile); SetWindowPos(hDlg, HWND_TOP, iX, iY, 0, 0, SWP_NOSIZE); g_hVolume = GetDlgItem(hDlg, IDC_VOLUME); g_hSlider = GetDlgItem(hDlg, IDC_SLIDER); SendMessage(g_hSlider, TBM_SETRANGE, FALSE, MAKELPARAM(0, 100)); iPos = 100 * g_dwVol / g_dwMax; SendMessage(g_hSlider, TBM_SETPOS, TRUE, iPos); SetVolume(iPos); } //------------------------------------------------------------------------------ void OnDestroy(HWND hDlg) { RECT rc; if (IsIconic(hDlg)) { return; } GetWindowRect(hDlg, &rc); WriteIniFileInt(_T("General"), _T("x"), rc.left); WriteIniFileInt(_T("General"), _T("y"), rc.top); } //------------------------------------------------------------------------------ void WriteIniFileInt(LPCTSTR szSect, LPCTSTR szKey, int iValue) { TCHAR szBuf[16]; _stprintf_s(szBuf, _T("%d"), iValue); WritePrivateProfileString(szSect, szKey, szBuf, g_szIniFile); } //------------------------------------------------------------------------------ void SetVolume(int iPos) { TCHAR szBuf[16]; _stprintf_s(szBuf, _T("%d"), iPos); SetWindowText(g_hVolume, szBuf); } }} resource.h #highlight(c){{ #define IDC_STATIC -1 #define IDD_DIALOG 100 #define IDC_VOLUME 1000 #define IDC_SLIDER 1001 }} MasterVolume.rc #highlight(c){{ // resource script #include <windows.h> #include "resource.h" IDD_DIALOG DIALOGEX 0, 0, 240, 48 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "MasterVolume" FONT 9, "MS Pゴシック" BEGIN LTEXT "0",IDC_STATIC,4,4,20,8 LTEXT "100",IDC_STATIC,200,4,20,8 LTEXT "",IDC_VOLUME,100,4,20,8 CONTROL "",IDC_SLIDER,"msctls_trackbar32", TBS_BOTH | WS_TABSTOP,4,16,200,24 END }}

表示オプション

横に並べて表示:
変化行の前後のみ表示: