1. Предисловие Как можно заметить из количества моих постов - я молчалив, а это моя первая статья. Очевидно многим она ничего нового не расскажет, однако нельзя забывать, что по форуму "гуляют" новички. Итак, если у тебя есть КПК и ты устал качать и искать нужный тебе софт под своего зверька, пора задуматься: А не попробовать ли написать его самому?! 2. Приступаем Скажу сразу - на моем КПК установлена Windows Mobile 6 (WM6) и в качестве тестового плацдарма выступает именно она. Однако безусловно подойдет и более раняя версия WM5. Не будем рассматривать поздние ОС (Windows CE X.XX, Pocket PC 200x) - они устарели и в новых КПК их конечно же не стоит. Конечно программирование под КПК, как и под ПК предполагает знание Вами хотя бы одного из языков программирования: C++, C#, VB.NET. Я предпочитаю C#.NET. Для меня он более удобен и, что немаловажно, прост. Поэтому и новичкам я советую поиграться с ним для начала, а уж если и надумаете далее писать что-то серьезное (к примеру системные вещи) - перейдете на C++. Но не пугайтесь, если программирование для Вас еще темный лес, сейчас Вы увидете на сколько оказывается это просто и для КПК. Для старта у нас на ПК должны быть установлены: Net Framework 2.0 и выше Visual Studio 2005* * В статье используется русскоязычная Visual Studio. Вы можете использовать и англоязычную, но прийдется искать в меню аналоги перевода с английского на русский. Примечательно то, что в Visual Studio уже встроен эмулятор устройства КПК. Поэтому работать можно что называется "неотходя от кассы", а протестированный вариант программы уже потом загрузить на КПК и довольствоваться проделанной работой. Тем не менее у эмулятора есть ряд ограничений: Протокол связи с внешними устройствами только TCP/IP Поддерживает только один процессор x86 Не поддерживает контактный экран (да и не особо нужно) Нет записи звука Поддерживает только английскую раскладку (На мой взгляд самое весомое ограничение) 3. Простой пример От слов к делу. Запускаем Visual Studio. Если это Ваш первый запуск, то выбираем запуск Visual Studio c обычными параметрами. Создаем новый проект: Файл -> Создать -> Проект... . В левом углу раскрываем тип проекта Visual C# -> Смарт-устройство. В правом углу выбираем шаблон: Проект интеллектуавльных устройств. Снизу можно задать имя проекта и указать в какой папке он будет сохранен и нажимаем Ок. (см картинку). Далее видим диалоговое окно добавления нового проекта. В качестве конечной платформы выбираем Windows Mobile 5.0 Pocket PC SDK, а версию фреймворка поставим .Net Compact Framework 2.0. Из шаблонов выбирем: Приложение для устройства. Жмем Ок. И перед нами окно разработки приложения. Слева редактируем форму, справа список подключенных модулей. Почти вся работа может осуществлятся редактированием формы: Добавил компонент и обработал его событие. Вот и сейчас давайте просто добавим кнопку (Button) из выдвигающейся панели инструменов, кидаем на форму, дважды кликаем, чтобы обработать ее нажатие и попасть в область редактирования кода. Впишем всеми любимый и простой "Hello world!" Code: private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hello world! This is antichat!"); } После этого в меню выбираем Построение -> Построить решение (или же Ctrl+Shift+B). Таким образом Вы откомпилируете написанный программный код и все модули соберутся воедино. Если все сделано правильно (а разве можно в таком простом примере ошибиться?) в выводе (в нижней части Visual Studio) будет написано что-то вроде: Компиляция завершена -- ошибок: 0, предупреждений: 0 SmartDeviceProject1 -> C:\Users\Admin\Documents\Visual Studio2005\Project\SmartDeviceProject1\SmartDeviceProject1\bin\Debug\SmartDeviceProject1.exe ========== Построение: успешно и без изменений: 1, с ошибками: 0, пропущено: 0 ========== В принципе уже готовый SmartDeviceProject1.exe файл можно искать в папке сохранения. Но давайте сэмитируем запуск не на ПК, а на КПК. Для этого в меню: Отладка -> Начать отладку. И в новом диалоговом окне выбираем эмулятор: USA WM 5.0 Pocket PC R2 Emulator. Нажимаем кнопку Развернуть. Некоторое время эмулятор будет подготавливать все для запуска программы, после чего появится окно программы (форма). Нажимаем на нашу кнопку и в результате выдается сообщение: Hello world! This is antichat! То есть эмулятор сэмитировал нажатие по сенсорному экрану, как Вы бы это делали стилусом, пальцем или еще чем 4. Подключаем фантазию По большому стчету на простом примере можно было и закончить статью, ведь дальше все ограничивается знанием языка C#. Однако я приведу еще тоже довольно простой пример, демонстрирующий как легко и быстро можно писать полезные для себя вещи. Как-то была у нас в универе (на лекциях же скучно) была игра в слова. Ну та самая игра, где из большого слова нужно как можно больше составить мелких. Однокурсники долго не понимали откуда я знаю столько слов и все время выигрываю, пока я не раскрыл секрет. Дак вот, была написана простенькая программа для КПК, которая все это делала за меня и вот её не сложный код (обработка клика кнопки Start): Code: private void menuItem1_Click(object sender, EventArgs e) { int count; bool found; int k; String InWord; char letter; FileStream stream = null; StreamReader reader = null; String DicPath; // DicPath = "dic.txt"; // if (openFileDialog1.ShowDialog() == DialogResult.OK) // DicPath = openFileDialog1.FileName; DicPath = AppPath + "Dictionaries\\" + comboBox1.SelectedItem; //указываем директорию к словарю count = 0; // Найдено 0 файлов изначально listBox1.Items.Clear(); //Очищаем список найденных слов if ((textBox1.Text != String.Empty) && (comboBox1.SelectedIndex >= 0)) // Если поля ввода заполнены { try { stream = new FileStream( // Открываем файл для чтения DicPath, FileMode.Open, FileAccess.Read, FileShare.Read ); reader = new StreamReader(stream, Encoding.Default); // Reader читает из потока данные // Или иначе можно так: // reader = new StreamReader(args[0]); // reader = File.OpenText(filename); String line = reader.ReadLine(); //Читаем первую строчку-слово из словаря while (line != null) // Так сказать, если не конец файла, читаем в цикле все остальное { InWord = textBox1.Text; // Введенное слово found = false; for (int i = 0; i < line.Length; i++) // В цикле смотрим, есть ли в прочитанном слове те же буквы, что и в введенном, //если да, то слово найдено { letter = line[i]; if (checkBox1.Checked) { if (Convert.ToString(line[i]) == "й") //Так же учитываем "и" за "й" и "е" за "ё" при необходимости letter = Convert.ToChar("и"); if (Convert.ToString(line[i]) == "ё") letter = Convert.ToChar("е"); } k = InWord.IndexOf(letter, 0, InWord.Length); if (k >= 0) { found = true; InWord = InWord.Remove(k, 1); } else { found = false; break; } } if (found) { if (line != textBox1.Text) { count++; listBox1.Items.Add(line); } } line = reader.ReadLine(); Application.DoEvents(); // Чтобы приложение не зависало во время выполнения цыкла } } catch (Exception error) { MessageBox.Show(error.Message); // Обработка ошибок } finally { if (stream != null) // Обработка конца потока и закрытие его (файла) { stream.Close(); statusBar1.Text = "Найдено : " + Convert.ToString(count); // Выводим количество найденных слов } } } else MessageBox.Show("Не все данные введены!"); } Полный исходный код проекта в купе со словарем можно скачать ТУТ 5. Заключение Конечно в статье всего не расскажешь и не покажешь, я лишь указал Вам направление, потому как, возможно, имея КПК и некоторое представление о программировании, Вы и не задумывались о наполнении его своими "фенечками". Если говорить о том, на сколько это перспективно и актуально - все зависит Вас. В интернете полно ПО для КПК, но за частую то, что приходится по душе мало. Спасибо за внимание. © Pr0mo
Сначала в статью хотел включить написание Hello world, но привел еще пример для большей информативности. Работа с сетью довольно сложное начало для новичка. Спасибо Хотел кстати в качестве продолжения и для Symbian написать, но по-моему видел что-то подобное на antichat уже. Используемый .Net Compact Framework - урезанная версия, как этого следовало ожидать и она специально создавалась из расчета мощностей КПК. Конечно на слабеньких КПК тормоза заметны (коих на ПК вообще нет). Поэтому лаги уменьшаются пропорционально увеличению мощности КПК (на прилавки поступают более новые и мощные). Есть еще один выход, чтобы избежать ресурсоемкости - писать ПО на C++
Вообще-то эмулятор идет в составе Windows Mobile SDK. Т.е. потребуется поставить еще и SDK. Не вполне ясно, при чем тут процессор. Эмулятор прекрасно работает на x64 двухядернике, а КПК с многоядерными процессорами мне лично неизвестны. А под контактным экраном подразумевается тачскрин или что? Если тачскрин - он прекрасно поддерживается, и он очень даже нужен. Вообще версия 3.5 на данный момент более актуальна. Хотя в принципе это не суть важно. А зачем вначале говорить про WM6, а потом брать эмулятор от WM5? Понятно, что обратная совестимость, но все-таки +10! У нас еще балда была Ужас. Это же делается гораздо проще: Code: letter = line[i]; if (checkBox1.Checked) { // Так же учитываем "и" if(letter == 'й') letter = 'и'; // Так же учитываем "ё" if(letter == 'ё') letter = 'е'; } В твоем коде будут создаваться лишние строки, а это - нагрузка на GC. Чтобы приложение не зависало - переноси обработку в отдельный поток: Code: private void Button1_Click(object _, EventArgs e) { var text = TextBox1.Text; System.Threading.ThreadPool.QueueUseWorkItem(_ => { // Process text there }); }