• Главная
  • Карта сайта
Не найдено

Програмуємо під Windows Mobile 6

  1. WinMobile вчора
  2. WinMobile сьогодні
  3. дорожній чемоданчик
  4. Час гроші
  5. Напишіть листа ...
  6. моніторимо процеси
  7. Файловий менеджер
  8. Подзвони мені подзвони
  9. The End
  10. Метод отримує список файлів

Добрі дяді з Apple звикли вирішувати за користувача, яке ПЗ і які опції йому потрібні. Що ж, це вибір їх користувачів. Ми ж з тобою беремо ... і просто самі Кодима те, що нам потрібно. Стара добра Винда була і залишається одним користувачів і програмістів, які обирають свій власний шлях.

WinMobile вчора

Ще буквально кілька років тому мобільна платформа страждала дефіцитом програмного забезпечення. Важко повірити, але, щоб знайти потрібну ТУЛЗ, доводилося нехило попітніти. А потім ще раз напружитися в спробах відшукати заповітний крек (Дивно, а ніби все непогано знаходилося, - Прим. Dr.Klouniz). Відсутність софта обумовлювалося тим, що для розробки програм під нову платформу не було зручною IDE. Так, був могутній Visual C ++, в якому, якщо мені не зраджує пам'ять, були відповідні майстри. Але, на жаль, їх можливостей не вистачало. Коли в 2003 році я спробував замутити першу програму для КПК, то відразу зрозумів, що моїх нервів не вистачить для інтимних відносин з жахливою «Visual Studio». Після Delphi це середовище здається аж надто непродуманої і незрозумілою. Таке відчуття, що пересідаєш з «мерса» на «Волгу».

WinMobile сьогодні

Сьогодні Windows Mobile сильно змінилася. Вона доросла аж до шостої версії і тепер її можна вважати дійсно комфортним та зручним ОС. Це було досягнуто як за рахунок поліпшення зовнішнього вигляду, так і за рахунок спрощення процесу розробки софта. Зараз вже не складає труднощів знайти просунутий поштовик або наворочений текстовий редактор. Більш того, багато розробників вже взяли за правило випускати мобільні версії своїх настільних продуктів. Для Windows Mobile вже давно з'явилися клони WinRAR, TotalCommander, WinZIP, MS Office і т.д. Поява великої кількості програм пояснюється в першу чергу розвитком платформи .NET. Створювати софт на базі цієї технології надзвичайно просто - і дуже звично для кодерів, які виросли на таких мовах як Delphi / C ++ Builder. Останні версії Visual Studio немов переродилися: вони стали зручними і воістину функціональними. Приготуйся, в рамках цієї статті ми зробимо невеликий тріп в чарівну і багатобарвну країну WM 6.0.

дорожній чемоданчик

Вирушаючи в подорож, не можна забувати про речі першої необхідності. Викинь зі свого похідного валізки перевірений часом Delphi, в цей раз він не знадобиться. Замість нього дістань VisualStudio (версію вибери якомога свіже; особисто я віддаю перевагу самої останньої - 2008). Крім студії нам також буде потрібно SDK для роботи з функціями, характерними для комунікаторів - sms, телефонія і т.д. І SDK, і саму VS ти завжди можеш злити з www.microsoft.com.

Час гроші

Будемо вважати, що ти успішно скачав і встановив потрібний SDK, а це значить, що можна рухатися далі. Запускай VisualStudio і створюй новий проект для Visual C # типу Smart Device. Відразу після вибору типу проекту перед тобою має з'явитися вікно.

У цьому вікні тобі треба вибрати платформу (Target platform) для якої ми плануємо створювати додаток, а також версію .NET фреймворками (.NET Compact Framework version) і шаблон додатки (Templates). Для наших прикладів в якості платформи встанови Windows Mobile 5.0 Smartphone SDK (якщо ти качав 6-ю версію SDK, то вибирай саме її). З нею тобі будуть доступні всі необхідні простору імен для роботи зі специфічними функціями комунікаторів / смартфонів. Версію фреймворками варто вибирати, виходячи з тієї, яка встановлена ​​на твоєму девайсі. Наприклад, на моєму комунікаторі Toshiba Portege G900 тусується .NET Framework 2.0, тому я вибрав саме цю версію.

Увага! Якщо на твоєму пристрої до сих пір встановлена ​​перша версія .NET Framework, то бігом на microsoft.com і завантажуй хоча б другу. Перша аж надто сильно урізана в плані функціоналу. Все, тепер залишається тільки вибрати шаблон для нашого застосування. Для сьогоднішніх прикладів нам цілком підійде Device Application. Клацати «Ок» - і VisualStudio згенерує новий порожній проект.

За замовчуванням VS створює чистий проект для мобільних пристроїв зі скіном у вигляді цього самого девайса. По правді кажучи, «Дизайн» форму в такому вигляді не дуже зручно, тому потрудися відразу відключити відображення скіна. Зробити це можна, клікнувши правою клавішею миші по формі і вибравши в контекстному меню «Show Skin». Після цього нехитрого дії ти побачиш більш-менш звичний вигляд форми.

Порожній проект готовий і настав час привести його в робочий вид. Готуй мишку, зараз ми будемо розкидати елементи управління. Сьогодні ми розберемо не один, а відразу кілька прикладів. Для такого «проекту» потрібна відповідна форма. До речі, варіанти форми з купою закладок я для себе не знайшов. Тому раджу тобі не морочитися і піти тим же шляхом, що і я - кинути і розтягнути по всій формі компонент TabControl, а потім створити в ньому п'ять закладок:

  • Відправлення SMS;
  • процеси;
  • Файловий менеджер;
  • Dialer;
  • Корисності.
  • Думаю, призначення закладок пояснювати не потрібно. Все і так очевидно за їх назвами ... Що? Тобі цікаво, що це за закладка «Корисне»? ОК, зараз поясню. Тут розташовано кілька кнопок, які виконують деякі корисні для користувача або западлостроітеля дії: поворот екрану, виключення / перезавантаження системи.

    Напишіть листа ...

    З дизайном форми покінчено, пора переходити до КОДІНГ. Перше, чого ми сьогодні навчимося - відправляти SMS. Цими короткими повідомленнями користується кожен з нас, а раз так, непогано б навчитися відправляти їх програмно. Навіщо? Цілі можуть бути різними. Наприклад, деякі на основі отриманих знань зможуть закодіть простеньку програмку, яка буде транслітерувати весь кириличний текст, тим самим, дозволяючи заощадити свої кревні на відправку SMS. Інші можуть через sms «виводити» з ворожій території різну корисну інформацію. Отже, створи обробник події для однієї єдиної кнопки з написом «відправити» і напиши на ньому наступний код:

    if (textBox1.Text! = "") {SmsMessage mymessage = new SmsMessage (); // ось тут можна додавати купу одержувачів mymessage.To.Add (new Recipient (textBox1.Text)); mymessage.RequestDeliveryReport = cbReport.Checked; mymessage.Body = textBox2.Text; try {mymessage.Send (); MessageBox.Show ( "Повідомлення успішно відправлено!", "Інформація!"); } Catch {MessageBox.Show ( "Коли Ви надсилаєте ПП виникла помилка!", "Помилка!"); }}

    Коду трохи, так що швиденько переписуй і повертайся сюди за роз'ясненнями. У самій першому рядку я перевіряю, заповнене чи поле з одержувачем (якщо немає, то робити нічого не потрібно). Врахуй, що для демонстраційного прикладу такої перевірки цілком достатньо, але для створення реального додатки її буде замало. Якщо ти вирішиш в майбутньому закодіть ТУЛЗ для відправки повідомлень, то я рекомендую тобі перевіряти номер одержувача за допомогою регулярних виразів. Тільки так можна бути впевненим, що це дійсно номер, а не чехарда з букв і цифр. Перевіривши номер одержувача, можна переходити безпосередньо до відправки. Для відправки SMS в SDK є готовий клас - SmsMessage. Як і годиться, перед тим як почати працювати з класом, потрібно створити його екземпляр. Саме це я і роблю в другій сходинці коду. Ініціалізувати клас, потрібно не губитися, а відразу почати заповнювати його властивості. На щастя, їх небагато:

  • TO - колекція одержувачів. У цій властивості ти можеш встановити як одного, так і декількох одержувачів.
  • RequestDeliveryReport - звіт про доставку. Якщо в цій властивості true, то після відправки повідомлення буде запитано звіт.
  • Body - текст повідомлення.
  • Розібравшись з властивостями, можна переходити до методів, а методів всього один - Send (). У прикладі виклик методу Send () я роблю висновок в блок операторів виняткових ситуацій. Це робиться на випадок несподіваних помилок. Спробуй зараз зберегти внесені зміни і зібрати проект. Не поспішай панікувати, якщо VS нервово матюкається. Просто додай новий простір імен (Microsoft.WindowsMobile.PocketOutlook) - і знову спробуй зібрати проект. Що, не хоче? Ok, do not worry. Зайди в меню Project -> Add Reference. У вікні вибери потрібну збірку і натисни «ОК». Тепер проект повинен успішно зібратися. Можеш уже зараз залити свіжоспечену прогу в свій девайс і протестувати. А я почну розбирати наступний приклад.

    моніторимо процеси

    На мій погляд, один з головних мінусів WinMobile - це відсутність вбудованих засобів для перегляду списку активних завдань або процесів. У написанні такої тулзи немає нічого складного, але чомусь багато програмісти намагаються непогано заробити на подібних програмах. Мені на очі попадався просунутий диспетчер задач з купою різних непотрібних функцій за ціною $ 30. Нічого собі? Особисто для мене це багато, і свої чесно зароблені гроші я віддаю перевагу витрачати на що-небудь інше. Отже, створюй обробник події Clicлk () для кнопки «Оновити», розташованої на другий закладці. Напиши тут всього один рядок коду:

    GetProcList ();

    Код самої процедури ти можеш знайти на відповідній врізки. Починай його переписувати, а я потружусь пояснити, що в ньому відбувається.

    private void GetProcList () {Cursor.Current = Cursors.WaitCursor; lvProcessList.Items.Clear (); process_list = TaskManager.Process.GetProcesses (); foreach (TaskManager.Process proc in process_list) {ListViewItem NewItem = new ListViewItem (proc.ProcessId.ToString ()); NewItem.SubItems.Add (proc.ProcessName); NewItem.SubItems.Add (proc.ThreadCount.ToString ()); lvProcessList.Items.Add (NewItem); } Cursor.Current = Cursors.Default; }

    Поглянувши на лістинг, ти напевно здивувався - для отримання списку процесів потрібна була всього одна строчка (перебір і додавання кожного з них в ListView не вважаємо). Якщо ти хоч раз пробував кодіть «диспетчер процесів» під Win32 (звичайно коділ;] [акер вже не раз писав про це), то напевно пам'ятаєш, що для отримання списку активних процесів доводилося викликати купу API-функцій і робити багато рухів тіла, - а тут все якось просто і швидко. Але не так просто, як здається на перший погляд!

    Рядок «process_list = TaskManager.Process.GetProcesses ()» говорить про те, що отримання процесів відбувається за допомогою виклику методу GetProcess () класу Process. Клас Process є розробкою Cristian Forsberg і, завдяки йому, робота з процесами перетворюється на суцільне задоволення. Точніше, в один рядок. Все, що нам потрібно, - це отримати список всіх процесів за допомогою виклику всього-на-всього одного методу - GetProcess (). Після цього залишається тільки запустити перебір в циклі і витягнути інформацію про кожного з них. Всю цю інформацію (кількість потоків, ім'я процесу, pid) я і додаю в ListView. Іншу чорну роботу робить добре продуманий клас. До речі, модуль з класом ти можеш взяти з нашого диска, а після виходу журналу в світ і на www.vr-online.ru буде доступний трохи перероблений варіант цього класу, з можливістю отримувати шлях до файлу процесу. Будемо вважати, що список процесів у нас отримано. Тепер потрібно навчитися ним керувати - вбивати зайві. Для вирішення цієї неважко завдання у класу Process є метод Kill (). Реалізація процесу завершення - нижче:

    TaskManager.Process proc; proc = process_list [lvProcessList.SelectedIndices [0]]; proc.Kill ();

    Силами цього нехитрого коду я виколупую виділений процес і просто викликаю вишеозвученний метод. Просто до неподобства!

    Файловий менеджер

    Файловий менеджер - тулза, без якої я не можу уявити жодного свого робочого дня. На «великому» компі я комфортно юзаю безкоштовний UnrealCommander (практично клон TotalCommander'a). З недавнього часу необхідність в функціональному файловому менеджері з'явилася і при роботі на вашому пристрої. Знову ж таки, я не став заморочуватися з Resco Explorer і його маленькими друзями, а вирішив спробувати закодіть все самостійно. Створи порожню функцію FileList і наповни її тіло (Хе-хе, - прим. Dr.Klouniz) кодом з відповідною врізки. Як завжди, повертайся за роз'ясненнями.

    На самому початку я міняю вид курсора. Отримання списку файлів - справа нешвидка, особливо на мобільних девайсах. Тому, щоб зайвий раз не бентежити користувача, краще вибрати звичний курсор для гальмівних операцій і спати спокійно. Після такої хитрої підготовки (нервової системи користувача) ніщо не завадить нам перейти безпосередньо до отримання списку файлів. Спочатку отримаємо список директорій (нехай вони будуть зверху, як і прийнято у всіх файлових менеджерах,) а вже після цього пробіжить по файлам. Для отримання директорій я використовую клас Directory. У цього класу є метод GetDirectories (), що дозволяє отримати список папок по переданому в якості єдиного параметра шляху. Отримавши список папок, їх обов'язково потрібно додати в контейнер-колекцію, щоб потім їх можна було зручно впорядкувати (foldersList.Sort ();).

    Відсортувавши список директорій, можна приступати до додавання знайдених папок в ListView. Після додавання папок я приступаю до отримання файлів. Алгоритм отримання списку файлів точно такий же, тому я не стану загострювати на ньому увагу. Тепер створи обробник події Click () для кнопки «Перейти». За її натискання ми будемо запитувати вміст конкретної папки. Все, що нам потрібно написати в цьому обробнику - виклик функції FileList (). Якщо зараз запустити приклад, то вже реально почати подорож по файлової системи. Набери в поле для введення шляху будь-яку адресу (наприклад, My Documents) і натисни на кнопку «Перейти». Якщо при переписуванні лістингу ти не допустив помилок, то через мить ListView повинен заповнитися списком файлів (рисунок 8).

    Отже, тепер наш менеджер вміє відображати список файлів, але дечого йому явно не вистачає: який може бути файловий менеджер без можливості виконання стандартних операцій (створення папок, копіювання і видалення файлів, запуску програми)? Тому нам волею не волею, але доведеться розширювати функціонал. ОК, почнемо з видалення файлів. Видалити файл не проблема (набагато важче його відновити :)). Від нас вимагається лише викликати метод Delete () класу File. В якості одного єдиного параметра метод приймає повний шлях до того файлу, який повинен бути знищений. Список файлів у нас в ListView. Є у нас і шлях до папки, в якій ми працюємо (tbPath). Значить, все, що нам потрібно - це додати ім'я файлу до повного шляху до папки, в якій ми зараз знаходимося, і виконати метод Delete ():

    File.Delete (tbPath.Text + listView1.Items [listView1.SelectedIndices [0]]. Text);

    Копіювання файлу реалізується аналогічним способом, але з однією відмінністю - тут потрібно викликати не метод Delete (), а метод Copy (), якому потрібно передати два параметри:

  • Повний шлях до файлу джерела;
  • Повний шлях до файлу приймача.
  • Визначити файл-джерело можна таким же способом, як і при видаленні, тому ще раз приводити код я не буду. Папки створюються за допомогою виклику методу CreateDirectory (). Метод приймає всього один параметр - шлях до створюваної папці. Як бачиш, вбудовані класи істотно спрощують роботу з файлами і папками, дозволяючи абсолютно забути про незручному використанні Windows API. Зовсім інша історія з запуском файлів.

    Так вже вийшло, але розробники C # не забезпечити нас зручним класом для запуску зовнішніх програм. Сумно, але не смертельно. Уже відомий нам Cristian Forsberg, крім класу для роботи з процесами, люб'язно надав на суд громадськості клас ShellExecute, що дозволяє стартувати програми. Підключи модуль з класом до свого проекту і, викликавши метод Start (), передай йому шлях до запускаємо файл. Подальше - робота класу. Я не стану наводити приклад коду запуску, так як в ньому нічого немає важкого. В крайньому випадку, на DVD тебе чекає повний исходник з усіма розглянутими класами.

    Подзвони мені подзвони

    Ми вже познайомилися з відправкою SMS, отриманням процесів, виконанням операцій з файлами ... дійшла черга і до телефонії! Я спеціально залишив це на закуску, адже завдяки класам працювати з нею просто і писати купу коду не знадобиться. Не буду багатослівним, просто поглянь на цей код:

    Phone NewPhone; NewPhone = new Phone (); NewPhone.Talk (tbTellNumber.Text, false);

    Цих трьох рядків досить, щоб зробити дзвінок за номером (звичайно, платному! :)), введеному в поле tbTellNumber. Другий параметр (false) методу Talk говорить про те, що номер потрібно набирати відразу ж, не чекаючи дозволів.

    The End

    Програмувати для Windows Mobile, використовуючи технологію .NET, надзвичайно швидко і зручно. Сьогоднішні приклади - зайве тому підтвердження. Зверни увагу, ми розглядали тільки демонстраційні приклади, але на їх основі цілком реально написати справжні хакерські тулзи. Наприклад, ти без праці зможеш відправляти з девайса власника всю потрібну тобі інфу за допомогою sms або влаштувати справжнісіньку прослушку серед білого дня (автоматично набрав потрібний номер в потрібний час і ...). І нехай потім жертва згадує, як його телефон зміг зателефонувати, стоячи на блокування. На цій славній ноті я хочу закінчити свою казку і попрощатися з тобою. Удачі в нелегких кодерскіх справах! Як завжди, всі твої питання я чекаю на мило.

    Метод отримує список файлів

    private void FileList () {Cursor.Current = Cursors.WaitCursor; listView1.Items.Clear (); listView1.BeginUpdate (); string [] folders = Directory.GetDirectories (tbPath.Text); ArrayList foldersList = new ArrayList (folders.Length); ListViewItem NewListView; int i = 0; for (i = 0; i <folders.Length; i ++) foldersList.Add (folders [i]); foldersList.Sort (); foreach (string directory in foldersList) {NewListView = new ListViewItem (Path.GetFileName (directory)); NewListView.SubItems.Add ( "Dir"); listView1.Items.Add (NewListView); } String [] files = Directory.GetFiles (tbPath.Text); foldersList = new ArrayList (files.Length); for (i = 0; i <files.Length; i ++) foldersList.Add (files [i]); foldersList.Sort (); foreach (string file in foldersList) {NewListView = new ListViewItem (Path.GetFileName (file)); NewListView.SubItems.Add ( "File"); listView1.Items.Add (NewListView); } If (tbPath.Text [tbPath.Text.Length - 1]. ToString ()! = "\\") {tbPath.Text = tbPath.Text + "\\"; } ListView1.EndUpdate (); Cursor.Current = Cursors.Default; }

    Стаття опублікована в журналі "Хакер" (http://xakep.ru). Вересень 2008 р

    Посилання на журнал: http://goo.gl/YTLMNp

    PS Друзі, перед тим як писати коментарі в стилі "Автор, на дворі 2014 рік, на фіг нам Windows Mobile", зверни увагу на дату статті - вересень 2008. На блозі я збираю всі свої статті, які писав для журналів. На жаль, деякі з них втратили актуальність.

    Що?
    Навіщо?
    Що, не хоче?
    30. Нічого собі?
    Провайдеры:
    • 08.09.2015

      Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
      Читать полностью

    • 08.09.2015
      IPNET

      Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
      Читать полностью

    • 08.09.2015
      Boryspil.Net

      Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
      Читать полностью

    • 08.09.2015
      4OKNET

      Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
      Читать полностью

    • 08.09.2015
      Телегруп

      ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
      Читать полностью

    • 08.09.2015
      Софтлинк

      Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
      Читать полностью