Климов Александр Петрович
Шрифт:
public Sound(Stream stream) {
// читаем данные из потока
m_soundBytes = new byte[stream.Length];
stream.Read(m_soundBytes, 0, (int)stream.Length);
}
/// <summary>
/// Воспроизводим звук
/// </summary>
public void Play {
// Если из файла, то вызываем PlaySound.
// если из ресурсов, то PlaySoundBytes.
if (m_fileName != null)
PlaySound(m_fileName, IntPtr.Zero,
(int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
else
PlaySoundBytes(m_soundBytes, IntPtr.Zero,
(int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
}
}
}
Теперь нужно перейти к самой форме. Код для нее приведен в листинге 13.12.
Листинг 13.12
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace PlaySound_CS {
public partial class Form1 : Form {
public Form1 {
InitializeComponent;
InitializeComponent;
#if DEBUG
MinimizeBox = false;
#else
MinimizeBox = true;
#endif
}
private void butResource_Click(object sender, EventArgs e) {
Sound sound =
new Sound(Assembly.GetExecutingAssembly.GetManifestResourceStream(
"PlaySound_CS.chimes.wav"));
sound.Play;
}
private void butFile_Click(object sender, EventArgs e) {
Sound sound = new Sound("Windows\\alarm3.wav");
sound.Play;
}
}
}
Системные звуки
Также разработчик может использовать функцию
MessageBeep
, позволяющую проигрывать системные звуки. Код, использующий эту функцию, приведен в листинге 13.13. Листинг 13.13
[DllImport("coredll.dll")]
extern static void MessageBeep(uint BeepType);
private void butBeep_Click(object sender, EventArgs e) {
MessageBeep(0);
}
Системное время
Чтобы получить или установить системное время на устройстве, нужно использовать функции
GetSystemTime
и SetSystemTime
. Следует учитывать, что функция GetSystemTime
возвращает время по Гринвичу, а не местное время. Код, иллюстрирующий применение этих функций, приведен в листинге 13.14. Листинг 13.14
using System.Runtime.InteropServices;
[DllImport("coredll.dll")]
private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);
[DllImport("coredll.dll")]
private extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);
private struct SYSTEMTIME {
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
private void GetTime {
// Получим системное время
SYSTEMTIME st = new SYSTEMTIME;
GetSystemTime(ref st);