Новости

Системні звуки

  1. Налаштування системних звуків
  2. Програмна настройка системних звуків
  3. Читання і запис звукових файлів для подій
  4. Читання даних про системні події з реєстру
  5. Запис до реєстру
  6. Створення резервних копій поточних звукових налаштувань
  7. Відновлення збережених налаштувань
  8. Відтворення звукового події
  9. Створення призначеного для користувача інтерфейсу
  10. завантаження данних
  11. Налаштування DataGridView
  12. висновок

У цій статті ми дізнаємося, як змінювати системні звуки Windows. Про всяк випадок рекомендується зробити резервну копію реєстру, перш ніж ви будете запускати нашу програму, яка вносить зміни в реєстрі.

Можливо, ви знаєте, що в Windows можна встановити свої звуки супроводу для різних подій, таких як Вхід в Windows, Установка з'єднання, Повідомлення про одержання пошти і так далі. Ми можемо налаштувати на комп'ютері жертви свої звуки, щоб пожартувати над колегою. Є багато ресурсів, де можна знайти хорошу колекцію звуків, наприклад,.

Налаштування системних звуків

Якщо у вас є доступ до комп'ютера жертви, то ви можете змінити системні звуки в Панелі управління, відкривши категорію Звук (Панель управління | Обладнання та звук | Звук | Зміна системних звуків). Ви можете пройтися по всіх подіях і призначити свої звуки, вказавши шляхи до файлів.

Програмна настройка системних звуків

Ми можемо програмно змінити системні звуки за допомогою своєї утиліти. Крім того, утиліта буде зберігати і відновлювати звукові настройки і відтворювати звуки.

Але для початку нам потрібно дізнатися, де зберігається інформація про файли системних звуків. Як і багато іншого, подібна інформація зберігається в реєстрі. Ви можете знайти цю інформацію в певному місці:

Кожна папка в розділі Schemes / Apps / .Default відповідає певній події. Наприклад, якщо ви відключали USB-пристрій, то повинні були чути системний звук, пов'язаний з подією DeviceDisconnect. У заданого події, подібного DeviceDisconnect, є кілька папок: .current, .Default, і папка для додаткових звукових схем.

Системне подія має наступну структуру:

  • .current - містить порожній ключ із значенням, що містить шлях до звукового файлу, який використовується в даній конфігурації. Для DeviceDisconnect в Windows XP поточним файлом є "C: \ WINDOWS \ media \ Windows XP Hardware Remove.wav".
  • .Default - Містить пусте значення, що містить звуковий файл за умовчанням. Якщо ви не змінювали звуковий файл, то це значення збігається з ключем .current.
  • Інші папки - У вас можуть бути інші папки, в яких зберігаються звукові схеми (призначені для користувача настройки).

Читання і запис звукових файлів для подій

Знаючи, де зберігаються потрібні налаштування, можна створити DataSet, в якому будуть міститися системні події і шлях до файлів для цих подій. Запустимо новий проект Windows Forms і виберемо "Add New Item ..." з вікна Solution Explorer, потім виберемо шаблон DataSet. Додамо елемента DataColumn SoundName and SoundFile, як показано нижче:

Далі додаємо новий файл для класу RegistryWrapper.cs, в якому будуть знаходитися всі функції для роботи з реєстром: читання, запис, збереження, відновлення даних.

Читання даних про системні події з реєстру

Оголосимо дві змінні в класі RegistryWrapper для зберігання шляхів.

// these represent the location in the registry with the user sounds string hivePrefix = @ "AppEvents \ Schemes \ Apps \ .Default \"; string hiveSuffix = @ "\. current";

Далі, додаємо метод GetSystemSound (), який повертає RegSoundDataTable, що містить значення SoundName і SoundFile. Перше, що ми робимо - це отримуємо список всіх підрозділів для шляху, який ми задаємо при виклику методу GetSubKeyNames. Метод поверне нам список всіх системних звуків для подій. Потім, ми проходимо через кожну подію, створюючи новий ряд для DataTable до тих пір, поки налаштування для SoundName до поточного події і SoundFile в ключі реєстру містять шлях до файлу. Зверніть увагу, що коли ми викликаємо метод GetValue для отримання звукового файлу, ми повинні передати в імені ключа порожній рядок "". Також ми додамо допоміжну функцію для з'єднання двох змінних, оголошених раніше.

public RegSound.RegSoundDataTable GetSystemSound () {// Get the subkey key string [] values ​​= Registry.CurrentUser.OpenSubKey (hivePrefix) .GetSubKeyNames (); RegSound.RegSoundDataTable tb = new RegSound.RegSoundDataTable (); foreach (string s in values) {// Loop through rows RegSound.RegSoundRow newRow = tb.NewRegSoundRow (); newRow.SoundName = s; newRow.SoundFile = (string) Registry.CurrentUser.OpenSubKey (getRegKeyPath (s)). GetValue ( ""); tb.Rows.Add (newRow); } Return tb; } // adds the full registry key including prefix and suffix private string getRegKeyPath (string s) {return hivePrefix + s + hiveSuffix; }

Запис до реєстру

Для установки всіх звукових подій ми створимо інший метод, який бере RegSound DataTable і звукові файли, які ми міняємо. Проходимо в циклі через кожен ряд в DataTable і встановлюємо значення ключа в реєстрі для звуку за допомогою методу SetValue. Викликаючи метод SetValue, нам потрібно знати ім'я ключа (в нашому випадку це порожній рядок ""), значення ключа (шлях до звукового файлу), і RegistryKind, який описує тип значення (ми використовуємо тип рядок).

public void SetSystemSound (RegSound.RegSoundDataTable sounds, string soundPath) {// loop through all sounds foreach (RegSound.RegSoundRow row in sounds) {// Set key and value RegistryKey key = Registry.CurrentUser.OpenSubKey (getRegKeyPath (row.SoundName) , true); key.SetValue ( "", soundPath, RegistryValueKind.String); }}

Створення резервних копій поточних звукових налаштувань

Змінюючи звукові схеми у жертви, ми повинні передбачити можливість відновити колишні налаштування. Для цього, додамо метод SaveSystemSound, який використовує DataTable для збереження і шляхи файлів. Ми можемо використовувати метод WriteXml в об'єкті DataTable для збереження DataTable як XML-файла.

public void SaveSystemSound (RegSound.RegSoundDataTable sounds, string savePath) {// Save Sound DataSet sounds.WriteXml (savePath); }

Відновлення збережених налаштувань

Тепер давайте додамо метод для відновлення налаштувань з попереднього кроку. Нам потрібно знати, де був збережений DataTable, і викликати метод ReadXml для читання даних. Тепер у нас є можливість пройти в циклі через кожне звукове подія і викликати метод setValue для установки нового значення.

public void RestoreSystemSound (string savePath) {// Restore Sound DataSet RegSound.RegSoundDataTable sounds = new RegSound.RegSoundDataTable (); sounds.ReadXml (savePath); foreach (RegSound.RegSoundRow row in sounds) {// Set Key RegistryKey key = Registry.CurrentUser.OpenSubKey (getRegKeyPath (row.SoundName), true); key.SetValue ( "", row.SoundFile, RegistryValueKind.String); }}

Відтворення звукового події

Нарешті, ми додамо можливість відтворення звуків. Звукові файли знаходяться в папці media системної папки Windows, нам потрібно швидко перевірити, чи є в шляху до файлу зворотний слеш ( "\"), щоб дізнатися, чи містить файл шлях і саме ім'я файлу. Якщо немає, то ми приєднуємо шлях до імені файлу і відтворюємо його.

public void PlayRegistrySound (string soundFile) {// play sound if there is an associated file if (soundFile! = "") {SoundPlayer sp = new SoundPlayer (); // add default path if there is not one int a = soundFile.IndexOf ( '\\'); if (a! = 0) {soundFile = "% SystemRoot% \\ media \\" + soundFile; } Sp.SoundLocation = soundFile; sp.Play (); }}

Створення призначеного для користувача інтерфейсу

Створення призначеного для користувача інтерфейсу ми почнемо з додавання елементів управління на форму:

  • Елемент ToolStrip для кнопок Бекап, Відновити, Вибрати, і Застосувати зміни.
  • DataGridView, який ми можемо перетягувати за допомогою клацання "Data> Show Data Sources," і перетягнувши елемент RegSound DataGridView.
  • Два елементи OpenFileDialog, один для вибору, звідки відновити настройки, а другий - для вибору звукових файлів для заміни.
  • Елемент SaveFileDialog для вибору, де зберігати резервну копію поточних системних звуків.

завантаження данних

Отже, у нас все майже все готово для додатка. Додамо ще дві змінні. Одна для подання RegistryWrapper, котору ми описали раніше і інша для зберігання даних RegSoundDataTable. Для заповнення DataTable, ми викличемо метод GetRegistrySounds, який в свою чергу викличе метод GetSystemSound, створений нами раніше. Ми викликаємо метод GetRegistrySounds під час завантаження форми і під час відновлення звуків або коли ми застосовуємо зміни, заповнюючи поточними звуковими настройками DataGridView.

private void frmMainMenu_Load (object sender, EventArgs e) {GetRegistrySounds (); } Private void GetRegistrySounds () {// Call the RegistryWrapper Class sounds = myReg.GetSystemSound (); regSoundDataGridView.DataSource = sounds; }

Налаштування DataGridView

Займемося поданням даних в елементі DataGridView, змінюючи деякі властивості, наприклад, установкою властивості AlternatingRowsDefaultCellStyle в різні кольори, змінюючи шрифт DefaultCellStyle в Arial 10, і вимкнувши можливість додавання, редагування та видалення даних. Ми також додамо зображення "play", щоб прослухати поточний асоційований звук. Для цього клацніть правою кнопкою миші на DataGridView і виберіть "Edit Columns" для виклику діалогового вікна Edit Column. Тут ми додамо нову колонку "Play," встановимо тип DataGridViewImageColumn, дамо властивості Image наше зображення музики і встановимо властивість ImageLayout в "Zoom", щоб зображення заповнило всю клітку колонки.

Додамо код для відтворення звуку, коли будемо клацати на зображенні. Для цього потрібно використовувати подія DataGridView CellContentClick. Звук буде грати, якщо ми клацнемо на третій колонці (індекс отчітиваестя з 0, тому для третьої колонки іспользуемs # 2). Для відтворення нам потрібно знати шлях до файлу, який ми отримаємо, створюючи DataGridViewTextBoxCell для колонки SoundFile і зчитуючи її значення.

private void regSoundDataGridView_CellContentClick (object sender, DataGridViewCellEventArgs e) {// Represents col # 3 the "Play" column if (e.ColumnIndex == 2) {DataGridViewTextBoxCell cell = (DataGridViewTextBoxCell) regSoundDataGridView.Rows [e.RowIndex] .Cells [e .ColumnIndex - 1]; // Play Sound myReg.PlayRegistrySound (cell.Value.ToString ()); }}

висновок

Читати і записувати дані реєстру дуже просто, використовуючи впорядковані дані DataSet. Також легко знайти нові звуки для додатка в інтернеті. Пробуйте. Щасливого вам програмування!

завантажити приклад

Переклад: Василь Котов

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: