Điều bạn đang yêu cầu không thể thực hiện được trên XP; hệ điều hành chỉ đơn giản là không hỗ trợ các mức âm lượng cho mỗi ứng dụng.
Bạn có thể thực hiện những gì bạn muốn bằng cách tạo lớp cài đặt giữ các thông tin như SoundActive: Boolean
hoặc PlaySounds: Boolean
hoặc tương tự. Đặt nó trong đơn vị riêng của nó, và có một phần khởi tạo tạo ra một thể hiện của nó và một phần hoàn thành giải phóng nó (làm cho nó có hiệu quả một tập hợp các giá trị toàn cầu).
Mỗi đơn vị cần truy cập vào các cài đặt này chỉ cần sử dụng đơn vị chứa chúng và điều chỉnh hành vi tương ứng. Vì vậy, mỗi lớp con quý vị hoặc hình thức hoặc bất cứ điều gì sẽ chỉ cần một tấm séc thêm:
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
Các thiết lập lớp cũng có thể chứa các phương pháp theo dõi các mức âm lượng hiện tại (trên XP, mức system-wide), và các phương pháp để tăng hoặc giảm âm lượng bằng cách sử dụng các hàm số lượng MMSystem
(có rất nhiều ví dụ ở đây và thông qua Google làm như vậy). Sau đó, ứng dụng của bạn có thể sử dụng các sự kiện OnActivate
và OnDeactivate
để đặt mức âm lượng khi ứng dụng của bạn tăng tiêu điểm và khôi phục nó về âm lượng phù hợp khi ứng dụng của bạn mất tập trung.
Trong Vista trở lên, bạn có thể sử dụng giao diện IAudioEndPointVolume
tôi đã đề cập trước đó và một trong hai GetMasterVolumeLevel
hoặc SetMasterVolumeLevel
phương pháp để kiểm soát hệ thống tích rộng (Tôi có một ví dụ để làm điều này, cùng với các MMDevAPI
định nghĩa giao diện thích hợp) hoặc cấp thiết bị âm lượng (sử dụng IMMDevioce.Activate
để chọn thiết bị phù hợp trước tiên và sau đó các phương pháp trên IAudioEndPointVolume
trên giao diện thiết bị nhận được từ IMMDevice.Activate
trong thông số ppInterface
).
Đối với các ứng dụng riêng lẻ, bạn sử dụng giao diện ISimpleAudioVolume
, trong đó có bốn phương pháp: GetMasterVolume
và SetMasterVolume
, mà kiểm soát mức âm lượng cho phiên âm thanh của ứng dụng của bạn, và GetMute
và SetMute
để cho phép bạn lấy giá trị cờ câm hiện tại hoặc thiết lập nó tương ứng. (Larry Osterman của MS, một trong những nhà phát triển đã làm việc về hỗ trợ âm thanh mới trong Vista và Win7, có một số lượng lớn starting point article trên blog của anh ấy về các loại âm thanh trong API mới và thời điểm sử dụng chúng.Có thể khái niệm có thể xác định thời gian chạy mà bạn đang sử dụng hệ điều hành và chuyển đổi giữa các chức năng MMSystem
trên XP và trước đó, và chức năng MMDevAPI
trên Vista và phiên bản cao hơn. Tuy nhiên, việc mong đợi một người nào đó ở đây cung cấp mã để làm như vậy là một chút không hợp lý. Các liên kết tôi đã cung cấp sẽ giúp bạn bắt đầu đi đúng hướng và khi bạn gặp phải sự cố theo cách giúp đỡ cụ thể trong quá trình làm việc thông qua những trò bịp đó sẽ là những câu hỏi hay.
Nguồn
2012-11-02 13:01:24
Có xem xét câu hỏi này: http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi
cho những gì tôi nhớ, XP đã không mức âm thanh trên mỗi ứng dụng. Bạn sẽ có một số API đầu ra âm thanh trung tâm trong ứng dụng của bạn và có chuyển đổi nếu bạn để nó ra Windows API hoặc chỉ cần bỏ qua và xử lý –
WinXP không có khả năng kiểm soát âm thanh ứng dụng. Điều này đã được thêm vào trong Vista, và nó sử dụng một API hoàn toàn mới (riêng biệt) để làm như vậy, với các giao diện mới được thêm vào để hỗ trợ nó. Larry Osterman (một trong những MS-giờ) đã có một loạt các API âm thanh mới trên blog của mình; Tôi không có một liên kết đến nó trên máy này, nhưng bạn sẽ có thể tìm thấy anh ta bằng cách Googling. Có những bài viết về điều này trên SO trong C/C++ Tôi nhớ nhìn thấy một trong khi trở lại là tốt; Tôi sẽ xem liệu tôi có thể tìm thấy cụm từ tìm kiếm để bạn sử dụng để tìm chúng hay không. –