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

ЖАНРЫ

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

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

Шрифт:

 DateTime dt = DateTime.UtcNow.ToLocalTime;

 // Выводим сообщение

 MessageBox.Show("Текущее время: " + st.wHour.ToString + ":" +

st.wMinute.ToString);

}

private void SetTime {

 // Сначала получим системное время

 SYSTEMTIME st = new SYSTEMTIME;

 GetSystemTime(ref st);

 // А теперь прибавим один час

 st.wHour = (ushort)(st.wHour + 1 % 24);

 SetSystemTime(ref st);

 MessageBox.Show("Новое
время: " + st.wHour.ToString + ":" +

st.wMinute.ToString);

}

private void butGetTime_Click(object sender, EventArgs e) {

 GetTime;

}

private void butSetTime_Click(object sender, EventArgs e) {

 SetTime;

}

Создание ярлыка

В некоторых случаях программисту необходимо создать ярлык к какой-либо программе. В этом случае можно воспользоваться специальной функцией

SHCreateShortcut
, применение которой демонстрируется в листинге 13.15.

Листинг 13.15

/// <summary>

/// Функция для создания ярлыка

/// </summary>

/// <param name="szShortcut">Строка, содержащая

/// путь и имя создаваемого ярлыка.

///</param>

/// <param name="szTarget">Строка, содержащая

/// путь и аргументы для ярлыка.

/// Размер строки ограничен 256 символами.

/// </param>

/// <returns>B успешном случае возвращается TRUE,

/// в случае ошибки возвращается FALSE

/// </returns>

[DllImport("coredll.dll", EntryPoint = "SHCreateShortcut")]

private static extern bool SHCreateShortcut(string szShortcut,

 string szTarget);

private void butCreateShortcut_Click(object sender, EventArgs e) {

 // Создадим ярлык к калькулятору

 bool success = SHCreateShortcut("\\My Documents\\Shortcut.lnk",

"\\Windows\\calс.exe\"");

}

В этом примере создается ярлык

Shortcut.lnk
для стандартного калькулятора, чей исполняемый файл носит имя
windows\calc.exe
.

Количество строк в текстовом поле

Если у текстового поля свойство

Multiline
имеет значение
True
, то свойство
Lines
возвращает массив строк в текстовом поле. Но у данного свойства есть два недостатка. Во-первых, свойство
Lines
не поддерживается библиотекой .NET Compact Framework, а во-вторых, это свойство не учитывает перенос слов. Для подсчета количества строк в многострочном текстовом поле можно использовать
сообщение
EM_GETLINECOUNT
. Соответствующий код приведен в листинге 13.16.

Листинг 13.16

[DllImport("coredll.dll")]

static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);

const int EM_GETLINECOUNT = 0x00BA;

private void butGetNumber_Click(object sender, EventArgs e) {

 // Узнаем число строк в текстовом поле

 int numberOfLines = SendMessage(textBox1.Handle, EM_GETLINECOUNT, 0, 0);

 sbInfo.Text = "Число строк: " + numberOfLines.ToString;

}

Реестр

Реестр является важной частью любой операционной системы семейства Windows. Не является исключением и система Windows Mobile, в которой тоже имеется собственный реестр. Однако разработчики компании Microsoft не стали включать редактор реестра в состав Windows Mobile. Поэтому для доступа к разделам реестра приходится устанавливать программы от сторонних производителей.

Однако любой программист может написать свой редактор реестра, используя возможности .NET Compact Framework. При этом следует учитывать, что в библиотеке .NET Compact Framework 2.0 появились классы для работы с разделами реестра. Если же вы продолжаете писать программы с использованием .NET Compact Framework 1.0, то придется вызывать функции Windows API.

В листинге 13.17 приведен код, который будет работать в любой версии .NET Compact Framework.

Листинг 13.17

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

namespace Registry_CS {

 class Registry {

/// <summary>

/// Создает ключ

/// </summary>

/// <param name="keyName">Имя создаваемого ключа</param>

/// <returns>B успешном случае возвращается

/// ERROR_SUCCESS</ returns>

public static int CreateKey(UIntPtr root, string keyName) {

UIntPtr hkey = UintPtr.Zero;

uint disposition = 0;

try {

return

RegCreateKeyEx(root, keyName, 0, null, 0, KeyAccess.None, IntPtr.Zero,

ref hkey, ref disposition);

} finally {

if (UIntPtr.Zero != hkey) {

RegCloseKey(hkey);

}

}

}

/// <summary>

/// Удаляет ключ

/// </summary>

/// <param name="keyName">Имя ключа</param>

/// <returns>B успешном случае возвращается

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