Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
- Название:Программирование КПК и смартфонов на .NET Compact Framework
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:978-5-91180-270-7
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание
Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?
Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.
Книга предназначена для начинающих программистов.
Программирование КПК и смартфонов на .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
[DllImport("coredll.dll")]
private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
///
/// Прячем панель задач, чтобы пользователь не мог
/// нажать кнопку Start
///
public static void HideTaskbar() {
IntPtr h = FindWindow("HHTaskBar", "");
ShowWindow(h, SW_HIDE);
}
///
/// Показывает панель задач
///
public static void ShowTaskBar() {
IntPtr h = FindWindow("HHTaskBar", "");
ShowWindow(h, SW_SHOW);
}
private void butHideTaskbar_Click(object sender, EventArgs e) {
HideTaskbar();
}
private void butShowTaskbar_Click(object sender, EventArgs e) {
ShowTaskBar();
}
На самом деле с помощью функций FindWindow
и ShowWindow
можно показывать и скрывать не только панель задач, но и окна других приложений.
Запуск других приложений
Иногда требуется запустить из своей программы другое приложение. В этом случае можно призвать на помощь функцию API CreateProcess
. В листинге 13.8 приведен код примера, который может запустить калькулятор, календарь и даже послать файл через инфракрасное соединение мобильному телефону. Для запуска всех этих функций на форме надо разместить всего три кнопки.
public class ProcessInfo {
public IntPtr hProcess;
public IntPtr hThread;
public Int32 ProcessId;
public Int32 ThreadId;
}
[DllImport("CoreDll.DLL", SetLastError = true)]
private extern static int CreateProcess(
String imageName, String cmdLine, IntPtr lpProcessAttributes,
IntPtr lpThreadAttributes, Int32 boolInheritHandles,
Int32 dwCreationFlags, IntPtr lpEnvironment, IntPtr lpszCurrentDir,
byte[] si, ProcessInfo pi);
private void butCalc_Click(object sender, EventArgs e) {
//Запускаем калькулятор
ProcessInfo pi = new ProcessInfo();
CreateProcess(
"calc.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero,
new Byte[128], pi);
}
private void butCalendar_Click(object sender, EventArgs e) {
//Запускаем календарь
ProcessInfo pi = new ProcessInfo();
CreateProcess(
"calendar.exe", "", IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero,
IntPtr.Zero, new Byte[128], pi);
}
private void butInfra_Click(object sender, EventArgs e) {
//Посылаем файл через инфракрасное соединение
ProcessInfo pi = new ProcessInfo();
CreateProcess(
"Beam.exe", "\\windows\\Alarm1.wav", IntPtr.Zero, IntPtr.Zero, 0, 0,
IntPtr.Zero, IntPtr.Zero, new Byte[128], pi);
}
Приведенный код достаточно прост. Нужно вызвать функцию CreateProcess
с именем исполняемого файла в первом параметре. В методе для отправки файла также используется второй параметр, в котором указываем имя отсылаемого файла.
Названия специальных файлов
В Windows существует ряд специальных папок, в которых содержатся файлы определенной категории. Например, в папке Избранное содержатся ссылки на любимые сайты пользователя.
Проблема заключается в том, что в локализованных версиях Windows эти папки зачастую имеют разные названия. Так, в американской версии Windows упомянутая папка имеет название Favorites
. И если ваша программа ссылается на файл, находящийся в специальной папке, то необходимо точно узнать, как называется эта папка на конкретном устройстве. Код проверки приведен в листинге 13.9.
// Константы
///
/// Папка, содержащая файлы и папки, которые появляются на
/// экране Сегодня
///
const int CSIDL_DESKTOPDIRECTORY = 0x0010;
///
/// Папка Избранное
///
const int CSIDL_FAVORITES = 0x0006;
///
/// Папка \Мои документы
///
const int CSIDL_PERSONAL = 0x0005;
///
/// Папка Программы в папке Главное меню
/// (\Windows\Start Menu\Programs)
///
const int CSIDL_PROGRAMS = 0x0002;
///
/// Папка Recent (содержит последние из открывавшихся
/// документов)
///
const int CSIDL_RECENT = 0x0008;
///
/// Папка Главное меню
/// (\Windows\Start Menu)
///
const int CSIDL_STARTMENU = 0x000b;
///
/// Папка Автозагрузка для программ,
/// которые автоматически загружаются при запуске Windows
/// \Windows\StartUp
///
const int CSIDL_STARTUP = 0x0007;
///
/// Папка, в которой хранятся шаблоны документов
///
const int CSIDL_TEMPLATES = 0x0015;
///
/// Функция получения имен специальных папок
///
[DllImport("Coredll.dll")]
static extern int SHGetSpecialFolderPath
(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);
const int MAX_PATH = 260;
private void Form1_Load(object sender, EventArgs e) {
// Папка Избранное
StringBuilder strFavorites = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strFavorites, CSIDL_FAVORITES, 0);
MessageBox.Show("Избранное: " + strFavorites.ToString());
// Папка Программы
StringBuilder strPrograms = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strPrograms, CSIDL_PROGRAMS, 0);
MessageBox.Show("Программы: " + strPrograms.ToString());
// Мои документы
StringBuilder strMyDocs = new StringBuilder(MAX_PATH);
SHGetSpecialFolderPath(this.Handle, strMyDocs, CSIDL_PERSONAL, 0);
MessageBox.Show("Мои документы: " + strMyDocs.ToString());
}
Использование звуковых файлов
Мир современных компьютеров трудно представить без мультимедийных возможностей; однако проигрывание звуковых файлов не поддерживалось в библиотеке .NET Framework 1.0. Подобный подход Microsoft удивил многих программистов. В этом случае приходилось использовать неуправляемый код с вызовом функции PlaySound
.
С выходом .NET Framework 2.0 ситуация изменилась в лучшую сторону. Но легкая поддержка звуковых файлов остается прерогативой настольных систем. В библиотеке .NET Compact Framework по-прежнему отсутствует поддержка проигрывания звуковых файлов. А ведь для разработки игры наличие звуковых эффектов является обязательным условием, иначе игра будет просто неинтересна!
Поэтому нужно устранить недоработку разработчиков из Microsoft. В новом примере будут использоваться два способа воспроизведения звуков. В первом случае программа будет извлекать звуковой фрагмент из ресурсов. Во втором случае программа будет проигрывать звук из обычного WAV-файла.
Итак, нужно создать новый проект с именем PlaySound_CS
. К проекту надо добавить новый класс с именем Sound
. Объявление функции PlaySound
, необходимой для проигрывания звуков, нужно поместить в класс Sound
, как показано в листинге 13.10.
private enum Flags {
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)]
Интервал:
Закладка: