Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
- Название:Программирование КПК и смартфонов на .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-91180-270-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание
Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?
Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование КПК и смартфонов на .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Тема применения функций Windows API в .NET Compact Framework практически неисчерпаема. В некоторых случаях использование этих функций оправданно, так как других вариантов для выполнения тех или иных задач просто не существует. В то же время библиотека .NET Compact Framework постоянно развивается, и часть задач с успехом решается с помощью встроенных классов, добавляемых в каждой новой версии .NET Compact Framework. Поэтому разработчику придется постоянно проводить ревизию своих программ, заменяя в случае необходимости трудный код с использованием Windows API на код с использованием безопасного управляемого кода .NET Compact Framework.
Вызов функций Windows API
Для вызовов функций Windows API используется механизм P/Invoke. Большинство часто вызываемых функций находится в библиотеке coredll.dll
.
Разработчики, которые пользовались функциями API в настольной версии Windows, наверняка обратят внимание на то, что эта библиотека coredll.dll
содержит множество знакомых функций из библиотек kernel32.dll
, gdi32.dll
и user32.dll
. Поэтому во многих случаях довольно легко будет перенести свои наработки из программ для настольного компьютера в приложения для мобильных устройств.
Определение платформы
Если нужно определить, на какой платформе запущено ваше приложение, то здесь вам не обойтись без вызова функции Windows API SystemParametersInfo
.
Для начала нужно создать новый класс PlatformDetector
, в котором следует объявить функцию SystemParametersInfo
и методы определения платформы. А в обработчике события Load
основной формы надо вызвать метод GetPlatform
, чтобы узнать платформу сразу же после загрузки приложения, как это показано в листинге 13.1.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace PlatformDetector_CS {
class PlatformDetector {
[DllImport("coredll.dll")]
private static extern bool SystemParametersInfo(int uiAction, int uiParam,
StringBuilder pvParam, int fWinIni);
private static int SPI_GETPLATFORMTYPE = 257;
public static Platform GetPlatform() {
Platform plat = Platform.Unknown;
switch (System.Environment.OSVersion.Platform) {
case PlatformID.Win32NT:
plat = Platform.Win32NT;
break;
case PlatformID.WinCE:
plat = CheckWinCEPlatform();
break;
}
return plat;
}
static Platform CheckWinCEPlatform() {
Platform plat = Platform.WindowsCE;
StringBuilder strbuild = new StringBuilder(200);
SystemParametersInfо(SPI_GETPLATFORMTYPE, 200, strbuild, 0);
string str = strbuild.ToString();
switch (str) {
case "PocketPC":
plat = Platform.PocketPC;
break;
case "SmartPhone":
// Note that the strbuild parameter from the
// PInvoke returns "SmartPhone" with an
// upper case P. The correct casing is
// "Smartphone" with a lower case p.
plat = Platform.Smartphone;
break;
}
return plat;
}
}
public enum Platform {
PocketPC, WindowsCE, Smartphone, Win32NT, Unknown
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace PlatformDetector_CS {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
try {
MessageBox.Show("Платформа: " + PlatformDetector.GetPlatform());
} catch (Exception ex) {
MessageBox.Show(ex.Message.ToString());
}
}
}
}
Особое внимание следует обратить на комментарий. Параметр strbuild
после вызова функции возвращает значение SmartPhone
с большой буквой «P», хотя более правильным вариантом считается слово с маленькой буквой «p».
Пароли
Как вы, вероятно, знаете, пользователь может установить пароль на свой карманный компьютер. Для этого ему нужно зайти в раздел Password
при помощи последовательности команд Start►Settings►Password
и указать четырехсимвольный пароль. С помощью четырех функций API можно получить сведения о пароле и даже попытаться угадать его!
Для тестирования этой возможности на форме надо разместить четыре кнопки и текстовое поле. Соответствующий код приведен в листинге 13.2.
// Функция для установления нового системного пароля
[DllImport("coredll.dll")]
private static extern bool SetPassword(string lpszOldpassword,
string lspzNewPassword);
// Функция для активации или блокировки текущего пароля
[DllImport("coredll.dll")]
private static extern bool SetPasswordActive(bool bActive,
string lpszPassword);
// Функция для определения текущего состояния пароля
[DllImport("coredll.dll")]
private static extern bool GetPasswordActive();
// Функция для проверки пароля [DllImport("coredll.dll")]
private static extern bool CheckPassword(string lpszPassword);
private void butCheckPass_Click(object sender, EventArgs e) {
txtInfo.Text ="Активность пароля: " + GetPasswordActive().ToString();
}
private void butNewPass_Click(object sender, EventArgs e) {
MessageBox.Show("Установка нового пароля " +
SetPassword("Активность пароля: False", txtInfо.Text).ToString());
}
private void butSetState_Click(object sender, EventArgs e) {
MessageBox.Show("Отключение пароля: " +
SetPasswordActive(false, txtInfo.Text).ToString());
}
private void butFindPass_Click(object sender, EventArgs e) {
MessageBox.Show("Угадали пароль? " + CheckPassword(txtInfo.Text).ToString());
}
Будьте осторожны с данными функциями на реальном устройстве. Если вы случайно установите новый пароль, не запомнив его, то вам придется применить жесткую перезагрузку с потерей всех данных!
Перезагрузка КПК
Для карманных компьютеров может применяться как жесткая, так и мягкая перезагрузка. Жесткая перезагрузка возвращает устройство в первоначальное состояние, удаляя все установленные программы. Делать жесткую перезагрузку без особой необходимости не следует. Мягкая перезагрузка является более безопасной операцией, которую часто выполняют при появлении различных сбоев в работе программ.
Если разработчику необходимо программно перезагрузить устройство, то необходимо воспользоваться функцией KernelIoControl
. В листинге 13.3 приведен небольшой пример, демонстрирующий мягкую перезагрузку.
public const uint FILE_DEVICE_HAL = 0x00000101;
public const uint METHOD_BUFFERED = 0;
public const uint FILE_ANY_ACCESS = 0;
public uint CTL_CODE(uint DeviceType, uint Function,
uint Method, uint Access) {
return
((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);
}
[DllImport("Coredll.dll")]
public extern static uint KernelIoControl(
uint dwIoControlCode, IntPtr lpInBuf, uint nInBufSize, IntPtr lpOutBuf,
uint nOutBufSize, ref uint lpBytesReturned);
private void butReset_Click(object sender, EventArgs e) {
uint bytesReturned = 0;
uint IOCTL_HAL_REBOOT =
CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE ANY ACCESS);
Интервал:
Закладка: