C# WPF アプリケーションで Win32 API 呼び出しを行うことにより、システムのオーディオ ボリュームを変更しようとしています。私が見たすべてのサイトで、次のようなコードが表示されました。
double val_c = 0;
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
const uint WM_APPCOMMAND = 0x319;
const uint APPCOMMAND_VOLUME_UP = 10;
const uint APPCOMMAND_VOLUME_DOWN = 9;
const uint APPCOMMAND_VOLUME_MUTE = 8;
IntPtr handy = this.Handle;
if (slider1.Value < val_c)
{
Win32.Win32.SendMessage(handy, WM_APPCOMMAND, handy, new IntPtr(APPCOMMAND_VOLUME_DOWN));
}
else
{
Win32.Win32.SendMessage(handy, WM_APPCOMMAND, handy, new IntPtr(APPCOMMAND_VOLUME_UP));
}
val_c = slider1.Value;
}
設定しようとしている正確な値を指定する場所がわかりません。
上記のコードは、ボリュームをどの値だけインクリメントしますか? 実際、上記がいくつかのフォーラムやブログなどに投稿されているにもかかわらず、私はそれを機能させることができません。最後の引数に「* 0x10000」を追加した場合にのみ機能します。それでも私はその重要性を理解することはできません。
スライダー (最小値 0、最大値 100) の値が変更されたときに上記を実行するように設定しましたが、スライダーは実際のシステム ボリュームと同期していません。スライダーを 25 に設定するだけで、システム ボリュームを 100 に設定できます。