///
/// Используется функцией VibrateGetDeviceCaps для определения
/// возможности воспроизведения виброзвонка.
///
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();
}
///
/// Включаем виброзвонок
///
/// В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.
public static bool StartVibrate() {
int result = Vibrate(0, IntPtr.Zero, 0xffffffff, 0xffffffff);
if (result != 0) {
return false;
}
return true;
}
///
/// Останавливаем виброзвонок
///
/// В успешном случае возвращается TRUE, в случае
/// ошибки - FALSE.
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.3using 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.4txtInfo.Text =
Environment.GetFolderPath(Environment.SpecialFolder.Startup).ToString();
Узнать имя устройства
Чтобы узнать имя устройства, на котором запущено приложение достаточно вызвать метод
GetHostName
, как показано в листинге 14.5.Листинг 14.5txtInfo.Text = System.Net.Dns.GetHostName().ToString();
Узнать ориентацию экрана
Чтобы узнать, какой режим экрана установлен на данный момент, достаточно получить свойство
Bounds
, как показано в листинге 14.6.Листинг 14.6txtInfo.Text =
Screen.PrimaryScreen.Bounds.Width + ":" + Screen.PrimaryScreen.Bounds.Height;
Зная ширину и высоту экрана, уже не составит труда понять, какой режим отображения используется в данный момент.
Открытие файлов по умолчанию
Стоит обратить особое внимание на класс
Process
. С помощью данного класса очень удобно запускать любой файл, который будет открываться программой, сопоставленной с данным типом файла. Предположим, что необходимо воспроизвести музыкальный файл MP3, но при этом неизвестно, какая именно программа у пользователя отвечает за воспроизведение этих музыкальных файлов. В этом случае можно просто указать имя файла, и система сама запустит соответствующую программу. Соответствующий код приведен в листинге 14.7.Листинг 14.7System.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.8private void butSendMail_Сlick(object sender, EventArgs e) {
System.Diagnostics.Process.Start
("mailto:alexander.klimoff@gmail.com?subject=About Book", null);
}
Кнопки навигации
У карманных компьютеров есть кнопки навигации, позволяющие управлять объектами на экране. Это кнопки со стрелками и кнопка ввода.
Чтобы узнать, на какую кнопку нажал пользователь, нужно переопределить событие
OnKeyDown
. Для создания тестового приложения нужно разместить на форме строку состояния, в которой будет отображаться название нажатой кнопки. Соответствующий код приведен в листинге 14.9.Листинг 14.9protected 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: