こんばんは。御礼頂き感謝いたします。
もしかしたらVISTAが理由なのかもしれません・・・。
当方の方でも2番目のソースを利用して実験してみましたが、動作確認出来ています。
ただし、win2000/visual studio 6.0と言う環境です。
以下のコードで実験しました。一応記載しておきます。マウスの左ボタンを押すたび、ボリュームが15又は0になります。
ウィンドウズのボリュームコントロールのアプリを立ち上げて確認できます(クリックされるたび音量スライダーが上下に動く)。
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static bool s_b = false;
switch(uMsg)
{
case WM_CREATE : return TRUE;
case WM_CLOSE : ::DestroyWindow(hWnd); return FALSE;
case WM_DESTROY : ::PostQuitMessage(0); return FALSE;
case WM_LBUTTONDOWN :
{
s_b ^= 0x1;
//左ボタンを押すたびにボリュームが15又は0に切り替わる
const int volume = s_b ? 15 : 0;
//新規ボリューム値を設定する
::SetMasterVolume(volume);
return FALSE;
}
default : break;
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
//ボリュームコントロールの為の初期化をする
::InitMasterVolumeControl();
//以下windowsプログラムのお決まりパターン
return msg.wParam;
}
お礼
machongolaさん、ありがとうございます。 ↑のコードを試してみましたが、やはり無理なようです。 vistaが原因なんでしょうか…。 なので多少荒技ですが以下の方法で操作することにしました。 ためになるアドバイスをありがとうございました。 case WM_LBUTTONDOWN: vol *= -1; //volが1なら音量100%、-1なら10% if(vol == 1){ for(i=0; i<適当な値; i++){ keybd_event(0xAE, 0, 0, 0); keybd_event(0xAE, 0, KEYEVENTF_KEYUP, 0); } } else{ for(i=0; i<適当な値; i++){ keybd_event(0xAF, 0, 0, 0); keybd_event(0xAF, 0, KEYEVENTF_KEYUP, 0); } } break;