Чтение онлайн

ЖАНРЫ

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

SND_SYNC = 0x0000,

SND_ASYNC = 0x0001,

SND_NODEFAULT = 0x0002,

SND_MEMORY = 0x0004,

SND_LOOP = 0x0008,

SND_NOSTOP = 0x0010,

SND_NOWAIT = 0x00002000,

SND_ALIAS = 0x00010000,

SND_ALIAS_ID = 0x00110000,

SND_FILENAME = 0x00020000,

SND_RESOURCE = 0x00040004

}

[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]

private extern static int PlaySound(string szSound, IntPtr hMod, int flags);

[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]

private extern static int PlaySoundBytes(byte[] szSound, IntPtr hMod,

int flags);

/// <summary>

///
Конструктор объекта Sound, который проигрывает звук из

/// указанного файла

/// </summary>

public Sound(string fileName) {

m_fileName = fileName;

}

/// <summary>

/// Конструктор объекта Sound, который проигрывает звук из

/// ресурсов

/// </summary>

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);

Поделиться с друзьями: