728x90
반응형
728x170
▶ MainForm.cs
using System;
using System.Media;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region WAVE OUT 볼률 설정하기 - waveOutSetVolume(waveOutHandle, volume)
/// <summary>
/// WAVE OUT 볼률 설정하기
/// </summary>
/// <param name="waveOutHandle">WAVE OUT 핸들</param>
/// <param name="volume">볼륨</param>
/// <returns>처리 결과</returns>
[DllImport("winmm")]
private static extern int waveOutSetVolume(IntPtr waveOutHandle, uint volume);
#endregion
#region WAVE OUT 볼륨 구하기 - waveOutGetVolume(waveOutHandle, volume)
/// <summary>
/// WAVE OUT 볼륨 구하기
/// </summary>
/// <param name="waveOutHandle">WAVE OUT 핸들</param>
/// <param name="volume">볼륨</param>
/// <returns>처리 결과</returns>
[DllImport("winmm")]
private static extern int waveOutGetVolume(IntPtr waveOutHandle, out uint volume);
#endregion
#region 메시지 보내기 - SendMessage(windowHandle, message, wordParameter, longParameter)
/// <summary>
/// 메시지 보내기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <param name="message">메시지</param>
/// <param name="wordParameter">WORD 매개 변수</param>
/// <param name="longParameter">LONG 매개 변수</param>
/// <returns>처리 결과</returns>
[DllImport("user32")]
private static extern IntPtr SendMessage(IntPtr windowHandle, int message, IntPtr wordParameter, IntPtr longParameter);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// WM_APPCOMMAND
/// </summary>
private const int WM_APPCOMMAND = 0x319;
/// <summary>
/// APPCOMMAND_VOLUME_MUTE
/// </summary>
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
SetVolumeSlider();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 왼쪽 볼륨 슬라이더 스크롤시 처리하기 - leftVolumeSlider_Scroll(sender, e)
/// <summary>
/// 왼쪽 볼륨 슬라이더 스크롤시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void leftVolumeSlider_Scroll(object sender, EventArgs e)
{
if(this.autoBalanceCheckBox.Checked)
{
this.rightVolumeSlider.Value = this.leftVolumeSlider.Value;
}
SetVolume();
}
#endregion
#region 오른쪽 볼륨 슬라이더 스크롤시 처리하기 - rightVolumeSlider_Scroll(sender, e)
/// <summary>
/// 오른쪽 볼륨 슬라이더 스크롤시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void rightVolumeSlider_Scroll(object sender, EventArgs e)
{
if(this.autoBalanceCheckBox.Checked)
{
this.leftVolumeSlider.Value = this.rightVolumeSlider.Value;
}
SetVolume();
}
#endregion
#region 무음 버튼 클릭시 처리하기 - muteButton_Click(sender, e)
/// <summary>
/// 무음 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void muteButton_Click(object sender, EventArgs e)
{
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE);
}
#endregion
#region 재생 버튼 클릭시 처리하기 - playButton_Click(sender, e)
/// <summary>
/// 재생 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void playButton_Click(object sender, EventArgs e)
{
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "Test.wav";
player.Play();
}
#endregion
#region 자동 밸런스 체크 박스 체크 변경시 처리하기 - autoBalanceCheckBox_CheckedChanged(sender, e)
/// <summary>
/// 자동 밸런스 체크 박스 체크 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void autoBalanceCheckBox_CheckedChanged(object sender, EventArgs e)
{
if(this.autoBalanceCheckBox.Checked)
{
int volume = (this.leftVolumeSlider.Value + this.rightVolumeSlider.Value) / 2;
this.leftVolumeSlider.Value = volume;
this.rightVolumeSlider.Value = volume;
SetVolume();
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 볼륨 슬라이더 설정하기 - SetVolumeSlider()
/// <summary>
/// 볼륨 슬라이더 설정하기
/// </summary>
private void SetVolumeSlider()
{
uint volume;
waveOutGetVolume(IntPtr.Zero, out volume);
int leftVolume = (int)(volume & 0xFFFF);
int rightVolume = (int)((volume >> 16) & 0xFFFF);
this.leftVolumeSlider.Value = leftVolume;
this.rightVolumeSlider.Value = rightVolume;
}
#endregion
#region 볼륨 설정하기 - SetVolume()
/// <summary>
/// 볼륨 설정하기
/// </summary>
private void SetVolume()
{
uint volume = (uint)(this.leftVolumeSlider.Value + (this.rightVolumeSlider.Value << 16));
waveOutSetVolume(IntPtr.Zero, volume);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 가상 데스크톱 전환하기 (0) | 2021.09.10 |
---|---|
[C#/WINFORM] Screen 클래스 : FromHandle 정적 메소드를 사용해 특정 윈도우가 속한 화면 구하기 (0) | 2021.09.04 |
[C#/WINFORM] Form 클래스 : MouseDown/MouseMove/MouseUp 이벤트를 사용해 테두리 없는 폼 만들기 (0) | 2021.08.30 |
[C#/WINFORM] SendKeys 클래스 : SendWait 정적 메소드를 사용해 메모장에 문자열 추가하기 (0) | 2021.08.30 |
[C#/WINFORM] Control 클래스 : IsKeyLocked 정적 메소드를 사용해 CAPS LOCK 키 눌림 여부 구하기 (0) | 2021.08.27 |
[C#/WINFORM] 사용자 비활성 감지하기 (0) | 2021.08.27 |
[C#/WINFORM] SystemInformation 클래스 : BootMode 정적 속성을 사용해 Windows 안전 모드 여부 구하기 (0) | 2021.08.26 |
[C#/WINFORM] 숫자를 단어로 변환하기 (0) | 2021.08.26 |
[C#/WINFORM] Button 클래스 : 권한 상승 필요 표시 버튼 사용하기 (0) | 2021.08.26 |
[C#/WINFORM] Screen 클래스 : PrimaryScreen 정적 속성을 사용해 기본 디스플레이 해상도 구하기 (0) | 2021.08.26 |
댓글을 달아 주세요