ボリュームを制御するためにプログラムにメッセージを送信させようとしていますが、ハンドルが必要です。私は現在、現在のコードで以下に示すようにブロードキャストを使用しようとしましたが、すべてのプロセスがメッセージを送信し、ボリュームが 100 または 0 になり、プログラムがフリーズします。Process.GetCurrentProcess().MainWindowHandle; を使用してみました。ただし、フォームまたはコマンド プロンプトがある場合にのみ機能します。注: 現在のコードを変更したものを使用して、このプログラムを動作させたいと考えています。
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Utilities
{
static class VolumeMessage
{
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
private const int WM_APPCOMMAND = 0x319;
private static IntPtr Handle = (IntPtr)0xffff;
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg,
IntPtr wParam, IntPtr lParam);
public static void Mute()
{
SendMessageW(Handle, WM_APPCOMMAND, Handle,
(IntPtr)APPCOMMAND_VOLUME_MUTE);
}
public static void volumeDown()
{
SendMessageW(Handle, WM_APPCOMMAND, Handle,
(IntPtr)APPCOMMAND_VOLUME_DOWN);
}
public static void volumeUp()
{
SendMessageW(Handle, WM_APPCOMMAND, Handle,
(IntPtr)APPCOMMAND_VOLUME_UP);
}
}
}