/// Используется функцией VibrateGetDeviceCaps для определения
/// возможности воспроизведения виброзвонка.
/// </summary>
public enum VibrationCapabilities : int {
VDC_Amplitude,
VDC_Frequency,
}
private void mnuStopVibrate_Click(object sender, EventArgs e) {
StopVibrate();
}
private void mnuVibrate_Click(object sender, EventArgs e) {
StartVibrate();
}
/// <summary>
/// Включаем виброзвонок
/// </summary>
/// <returns>В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.</returns>
public static bool StartVibrate() {
int result = Vibrate(0, IntPtr.Zero, 0xffffffff, 0xffffffff);
if (result != 0) {
return false;
}
return true;
}
/// <summary>
/// Останавливаем виброзвонок
/// </summary>
/// <returns>В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.</returns>
public static bool StopVibrate() {
int result = VibrateStop();
if (result != 0) {
return false;
}
return true;
}
ВНИМАНИЕ
Приведенный код будет работать только на смартфонах. На форумах можно найти сообщения, что на устройствах под управлением PocketPC Phone Edition этот пример не работает, даже если указанное устройство поддерживает виброзвонок.
Глава 14
Кирпичики .NET Compact Framework
Итак, изучение .NET Compact Framework подходит к концу. Мы с вами рассмотрели различные аспекты программирования для карманных компьютеров и смартфонов. Напоследок я хочу предложить вам несколько маленьких советов-кирпичиков, с помощью которых вы сможете построить свое новое приложение. Часть этих советов уже встречалась вам на страницах этой книги. Но, может быть, вы не обратили на них внимания или не помните, где искать нужный вам кусок кода. Поэтому я отобрал часть этих советов и поместил их в отдельную главу. Эту главу можно рассматривать как справочный материал
Узнать версию .NET Compact Framework
В папке Windows есть утилита CGACUTIL.EXE, которая выводит номер версии установленной .NET Compact Framework. Если нужно программно узнать номер версии, то следует воспользоваться кодом, приведенным в листинге 14.1.
Листинг 14.1
// Узнаем версию установленной .NET Compact Framework
txtAppDir.Text = Environment.Version.ToString();
Узнать версию операционной системы
Для получения версии операционной системы нужно вызвать уже свойство OSVersion, как показано в листинге 14.2.
Листинг 14.2
// Узнаем версию операционной системы
txtInfo.Text = Environment.OSVersion.ToString();
Получаемые значения приведены в следующем списке.
□ 3.0 — соответствует Pocket PC 2000/2002.
□ 4.20 — соответствует Pocket PC 2003.
□ 4.21 — соответствует Pocket PC 2003 SE.
□ 5.01 — соответствует Windows Mobile 5.0.
Путь к запущенному приложению
Иногда требуется узнать путь к файлу запущенного приложения. Для этого можно воспользоваться кодом из листинга 14.3.
Листинг 14.3
using System.IO;
using System.Reflection;
txtAppDir.Text =
Path.GetDirectoryName(Assembly.GetExecutingAssemblу().GetModule()[0].
FullyQuelifiedName).ToString();
В этом примере после выбора соответствующего пункта в текстовом поле будет отображен полный путь к файлу запущенного приложения.
В главе, посвященной функциям Windows API, путь к специальным папкам отыскивался с помощью функции SHGetSpecialFolderPath. Сторонники управляемого кода могут воспользоваться методом GetFolderPath, который появился в .NET Compact Framework 2.0. С помощью перечисления Environment.SpecialFolder можно получить пути к некоторым специальным папкам системы. Например, чтобы получить путь к папке Start Up, можно воспользоваться кодом, приведенным в листинге 14.4.
Листинг 14.4
txtInfo.Text =
Environment.GetFolderPath(Environment.SpecialFolder.Startup).ToString();
Чтобы узнать имя устройства, на котором запущено приложение достаточно вызвать метод GetHostName, как показано в листинге 14.5.
Листинг 14.5
txtInfo.Text = System.Net.Dns.GetHostName().ToString();
Чтобы узнать, какой режим экрана установлен на данный момент, достаточно получить свойство Bounds, как показано в листинге 14.6.
Листинг 14.6
txtInfo.Text =
Screen.PrimaryScreen.Bounds.Width + ":" + Screen.PrimaryScreen.Bounds.Height;
Зная ширину и высоту экрана, уже не составит труда понять, какой режим отображения используется в данный момент.
Открытие файлов по умолчанию
Стоит обратить особое внимание на класс Process. С помощью данного класса очень удобно запускать любой файл, который будет открываться программой, сопоставленной с данным типом файла. Предположим, что необходимо воспроизвести музыкальный файл MP3, но при этом неизвестно, какая именно программа у пользователя отвечает за воспроизведение этих музыкальных файлов. В этом случае можно просто указать имя файла, и система сама запустит соответствующую программу. Соответствующий код приведен в листинге 14.7.
Листинг 14.7
System.Diagnostics.Process.Start("\My Music\myfile.mp3");
ВНИМАНИЕ
Класс System.Diagnostics.Process появился в .NET Compact Framework 2.0. Для версии .NET Compact Framework 1.0 нужно использовать функцию API ShellExecuteEx.
Создание и отправка письма
Существует очень легкий и быстрый способ создания и отправки письма с использованием технологии, применяемой на веб-страницах. С помощью ключевого слова mailto создается заготовка письма, в которой указываются автор сообщения, тема и текст письма. После этого запускается процесс, который в автоматическом режиме запускает нужную почтовую программу и отсылает письмо, как показано в листинге 14.8.
Листинг 14.8
private void butSendMail_Сlick(object sender, EventArgs e) {
System.Diagnostics.Process.Start
("mailto: [email protected]?subject=About Book", null);
}
У карманных компьютеров есть кнопки навигации, позволяющие управлять объектами на экране. Это кнопки со стрелками и кнопка ввода.
Чтобы узнать, на какую кнопку нажал пользователь, нужно переопределить событие OnKeyDown. Для создания тестового приложения нужно разместить на форме строку состояния, в которой будет отображаться название нажатой кнопки. Соответствующий код приведен в листинге 14.9.
Листинг 14.9
protected override void OnKeyDown(KeyEventArgs keyg) {
switch (keyg.KeyData) {
case Keys.Left:
sbaKeys.Text = "Left";
break;
case Keys.Right:
sbaKeys.Text = "Right";
break:
case Keys.Down:
sbaKeys.Text = "Down";
break;
case Keys.Up:
sbaKeys.Text = "Up";
break;
case Keys.Return:
sbaKeys.Text = "Return";
break:
default:
break;
}
}
Вот и подошла к концу книга о программировании для мобильных устройств с помощью .NET Compact Framework. Надеюсь, я смог рассказать об основных особенностях программирования в этой среде, и вам будет легко продолжить изучение этой технологии. Жизнь не стоит на месте, и постоянно выпускаются новые релизы эмуляторов, обновлений SDK и новых утилит. Компания Microsoft уже работает над новой мобильной версией Windows, которая должна прийти на смену Windows Mobile 5.0, и обещает выпустить ее в конце 2006 года. Новая операционная система называется Crossbow. По заявлениям разработчиков, в ней будут представлены расширенные средства синхронизации с программами Office 2007 и Exchange 12.
Также в состав операционной системы войдет новая программа Office Communicator, обладающая широкими возможностями обмена информацией через мгновенные сообщения, голосовую связь и видео. Также появилась информация, что после Crossbow будет выпущена еще одна новая платформа под кодовым названием Photon. Главная особенность этой системы заключается в том, что ее можно будет использовать как на смартфонах, так и на карманных компьютерах. На сегодняшний день, по оценкам экспертов, компания Microsoft удерживает примерно 16% рынка мобильных операционных систем. Лидером в этом сегменте является операционная система Symbian, на долю которой приходится 63%. Но есть все предпосылки, что в ближайшем будущем эти цифры могут измениться в сторону увеличения доли Windows Mobile.
Напоследок хотелось бы привести несколько полезных ссылок на различные ресурсы в Сети, которые могут оказаться полезными для разработчиков.