2010-11-20 24 views
7

Tôi có mã này để tắt/bật tiếng âm lượng tổng thểC# có được thạc sĩ mức âm lượng/precent

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319; 

[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE); 

tôi sẽ biết làm thế nào tôi có thể nhận được mức âm lượng tổng thể/precent vì tôi muốn biết nếu âm thanh đã bị tắt tiếng hay không.

Chỉnh sửa: hoặc người nào khác tôi muốn chia âm thanh tắt tiếng/bật tiếng vì vậy tôi sẽ có hai chức năng - một cho tắt tiếng và một cho bật tiếng.

cảm ơn

Trả lời

1

tôi không thể làm điều đó cho tất cả các phiên bản Windows (xp, vista & 7).
Mặc dù, tôi đã đạt được nó bằng các chương trình bên ngoài được sử dụng, chẳng hạn như NirCmd và gửi lệnh mà tôi cần.

giải pháp không tốt lắm nhưng nó đã giải quyết được vấn đề của tôi.

0

This thread cho biết cách điều khiển âm lượng chính từ C#.

Bạn cũng có thể quan tâm đến các phản ứng cho câu hỏi này: Get Master Sound Volume in c#

Đặc biệt là wrapper NAudio quản lý.

+0

đã dùng thử và nó không hoạt động. – Ron

+1

Điều gì, cụ thể, không hoạt động? Nhận xét trong chuỗi chỉ ra rằng nó hoạt động. –

+0

sử dụng hàm GetVolume() và nó trả lại 65535, sau khi tôi thay đổi âm lượng nó trả lại cho tôi cùng một giá trị - 65535. có lẽ tôi đang sử dụng hàm sai? – Ron

4

Có xem xét dự án này http://www.codeproject.com/KB/vista/CoreAudio.aspx

Họ đã tạo một điều khiển máy trộn riêng, mà cũng báo cáo các volumne hiện tại và trạng thái tắt/mở tiếng:

defaultDevice.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(
    AudioEndpointVolume_OnVolumeNotification); 
// .. snip .. 
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data) 
{ 
    Console.WriteLine("New Volume {0}", data.MasterVolume); 
    Console.WriteLine("Muted  {0}", data.Muted); 
} 

Liệu điều này giúp bạn?

EDIT: Với mã này và các lớp từ dự án bạn sẽ có thể thiết lập và câm unset trực tiếp (không chuyển đổi):

MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); 
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); 
defaultDevice.AudioEndpointVolume.Mute = true; // or false 
+0

Liên kết CodeProject đã chết –

+0

Điều này làm việc kỳ diệu. Lưu ý rằng bạn sẽ cần phải tham khảo NAudio.dll với không gian tên sau: using NAudio.CoreAudioApi ;. MasterVolumeLevelScalar là thang đo 0-1 tuyến tính, trong khi MasterVolumeLevel là một số thang đo phi tuyến tính. –

Các vấn đề liên quan