На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU
  
> FAQ по CE/PPC
    FAQ по использованию Windows CE/Pocket PC

    Q: Что такое экран Today?
    A: Today Screen - это рабочий стол КПК, который Вы видите при загрузке. На нём обычно видна текущая дата, напоминания (Appointments) и т.п. в зависимости от настроек.

    Q: Как мне добавить дополнительные элементы на Today Screen?
    A: Существует программа Spb Pocket Plus (http://www.spbsoftwarehouse.com/products/pocketplus/?ru), которая позволяет разделять Today Screen на закладки, добавлять ярлыки, выводить индикаторы заряда батареи, использования памяти и т.п. Также, программа имеет дополнительные функции, например отключение функции Smart Minimize.

    Q: Как заставить кнопку закрытия окон действительно закрывать их, а не сворачивать?
    A: См. предыдущий вопрос. Также, рекомендую установить программу WisBar Advance.

    Q: Как убрать все или некоторые элементы с "рабочего стола"?
    A by HPC: Откройте "Пуск -> Настройки -> Сегодня -> Элементы" и снимите галочки напротив тех пунктов, которые не должны отображаться на экране Today.

    Q: Как синхронизировать ПК и КПК?
    A: Можно использовать Microsoft Active Sync.

    Q: Где найти информацию по Wi-Fi?
    A: http://www.wireless.ru/wireless, http://www.comptek.ru/wireless/

    Q: Как синхронизировать ПК и КПК?
    A: Можно использовать Microsoft Active Sync.

    Q: Почему в Pocket Word не отображаются таблицы?
    A: Pocket Word начал поддерживать таблицы только начиная с Windows Mobile 2005.


    ------------------------------------------------------------------------------------------------------------

    Программирование CE/PPC

    Q: Что нужно для синхронизации ПК и КПК по Bluetooth?
    A: Bluetooth-адаптер для ПК, поддержка Bluetooth на КПК и Windows XP Service Pack 2. Если нет возможности или желания использовать SP2, иногда работают драйвера сторонних разработчиков, однако на практике такое бывает редко.

    Q: Что нужно для того, чтобы начать программировать для Windows CE/Pocket PC?
    A: Выбор среды разработки зависит от языка. В общем случае это Visual Studio .NET или Visual Studio 2005. Для С и С++ можно использовать MS eMbedded Visual C++ (обычно на него необходим Service Pack). В любом случае понадобится SDK на ОС, под которую Вы хотите что-либо написать, и, возможно, эмулятор.

    Q: Чем вообще отличается пограммирование под Pocket PC от обычного?
    A: Почти ничем. Немного другие интерфейсы, немного меньше ресурсов.

    Q: Почему компилятор ругается на строки?
    A: В Pocket PC используется Unicode. Это удобно тем, что не нужно думать о множестве кодировок при переводе приложения на другой язык. Строки объявляются например так:
    ExpandedWrap disabled
      LPCTSTR lpString = L"hello";
      LPCTSTR lpString2 = _T("hello");
    Для конвертирования строк разных типов можно использовать WideCharToMultiByte(), MultiByteToWideChar().

    Q: Как преобразовать CString в число? atoi() не хочет работать.
    A by ASMerg: Необходимо использовать функцию _ttoi().

    Q: Как программно синхронизировать ПК и КПК?
    A: Посмотрите здесь: http://msdn.microsoft.com/library/en-us/wc...grammingFAQ.asp



    Программное включение и выключение Bluetooth и WLAN на HP iPAQ

    На КПК iPAQ фирмы HP используется Bluetooth-стек от фирмы BROADCOM (WIDCOMM). SDK для него довольно дорог, но в некоторых случаях можно обойтись своими силами.

    Существуют некоторые особенности работы с беспроводными сервисами на iPAQ. Есть несколько способов включить Bluetooth, работоспособность которых зависит от неизвестных мне факторов. Я опишу способы включения Bluetooth и WLAN с помощью iPAQUtil.dll.

    Итак, чтобы программно включить WLAN на КПК iPAQ фирмы HP, можно использовать функции библиотеки iPAQUtil.dll. Библиотека включает в себя довольно много сервисных функций, в том числе:
    • bool iPAQSetBlueToothRadio(DWORD *status) для включения или выключения Bluetooth
    • bool iPAQGetBlueToothRadioStatus(DWORD *status) для получения статуса Bluetooth
    • bool iPAQSetWLANRadio(DWORD *status) для включения или выключения WLAN
    • bool iPAQGetWLANRadioStatus(DWORD *status) для получения статуса WLAN

    Для функций iPAQSetBlueToothRadio() и iPAQSetWLANRadio() переменная status может принимать следующие значения:
    • 1 для того, чтобы включить Bluetooth или WLAN
    • 0 для того, чтобы выключить Bluetooth или WLAN

    Примечание: несмотря на то, что во всех доступных мне источниках информации говорится о том, что WLAN включается значением status=1, на моём КПК функция iPAQSetWLANRadio() работала с аргументами 1 - выключить, 0 - включить. Точно такие же значения возвращала функция iPAQGetWLANRadioStatus().

    Чтобы получить статус Bluetooth или WLAN, достаточно вызвать iPAQGetBlueToothRadioStatus() или iPAQGetWLANRadioStatus() соответственно. Функции устанавливают значение переменной status. Не путайте с возвращаемым значением. Используются следующие значения:
    • 1 - Bluetooth или WLAN включен
    • 0 - Bluetooth или WLAN выключен

    Примечание, данное выше, справедливо и для функции iPAQGetWLANRadioStatus().


    Рассмотрим пример использования указанных функций:

    ExpandedWrap disabled
      // Регистрируем тип экспортируемых функций
      typedef bool (*iPAQUtil)(DWORD *lpdwValue);
       
      // Загружаем библиотеку iPAQUtil.dll
      HANDLE IPAQ_handle = LoadLibrary(L"iPAQUtil.dll");
      if (IPAQ_handle == INVALID_HANDLE_VALUE)
      {
          MessageBox(NULL, L"Ошибка открытия iPAQUtil.dll. Программа работает только на HP iPAQ.",
                  L"Ошибка", MB_OK | MB_ICONEXCLAMATION);
          return 1;
      }
       
      // Экспортируем функции
      iPAQUtil iPAQSetBluetoothRadio      = (iPAQUtil)GetProcAddress((HMODULE)IPAQ_handle, L"iPAQSetBlueToothRadio");
      iPAQUtil iPAQGetBluetoothRadioStatus= (iPAQUtil)GetProcAddress((HMODULE)IPAQ_handle, L"iPAQGetBlueToothRadioStatus");
      iPAQUtil iPAQSetWLANRadio           = (iPAQUtil)GetProcAddress((HMODULE)IPAQ_handle, L"iPAQSetWLANRadio");
      iPAQUtil iPAQGetWLANRadioStatus     = (iPAQUtil)GetProcAddress((HMODULE)IPAQ_handle, L"iPAQGetWLANRadioStatus");
       
      // Проверяем, успешно ли всё экспортировалось
      if (!iPAQSetBluetoothRadio || !iPAQGetBluetoothRadioStatus || !iPAQSetWLANRadio || !iPAQGetWLANRadioStatus)
      {
          MessageBox(NULL, L"Ошибка загрузки iPAQUtil.dll", L"Ошибка", MB_OK | MB_ICONEXCLAMATION);
          return 1;
      }
       
      DWORD status = 0;
      iPAQGetBlueToothRadioStatus(&status);
      if (status)
      {
          // Bluetooth включен
      }
      else
      {
          // Bluetooth выключен
      }
       
      iPAQGetWLANRadioStatus(&status);
      if (status)
      {
          // WLAN включен (в моём случае выключен)
      }
      else
      {
          // WLAN выключен (в моём случае включен)
      }
       
       
       
      // Включаем Bluetooth
      state = 1;
      iPAQSetBlueToothRadio(&state);
       
      // Выключаем Bluetooth
      state = 0;
      iPAQSetBlueToothRadio(&state);
       
       
      // Включаем WLAN (в моём случае - выключаем)
      state = 1;
      iPAQSetWLANRadio(&state);
       
      // Выключаем WLAN (в моём случае - включаем)
      state = 0;
      iPAQSetWLANRadio(&state);
       
      // И освобождаем библиотеку
      FreeLibrary(IPAQ_handle);



    Есть второй способ включения Bluetooth - методом посылки оконного сообщения программе BTTrayCE.exe. Для этого нужно зарегистрировать два сообщения - WIDCOMM_WM_BTRADIO_ON и WIDCOMM_WM_BTRADIO_OFF. Имя класса окна, которому нужно отправлять сообщения - WCE_BTTRAY. Последовательность действий сводится к следующему:

    1. Зарегистрировать указанные сообщения с помощью RegisterWindowMessage()
    2. Получить HWND окна BTTrayCE.exe с помощью функции FindWindow()
    3. Отправить сообщение WIDCOMM_WM_BTRADIO_ON для включения или WIDCOMM_WM_BTRADIO_OFF для выключения Bluetooth с помощью SendMessage()

    Пример:
    ExpandedWrap disabled
      // Регистрируем оконные сообщения
      UINT WIDCOMM_WM_BTRADIO_ON  = RegisterWindowMessage(L"WIDCOMM_WM_BTRADIO_ON");
      UINT WIDCOMM_WM_BTRADIO_OFF = RegisterWindowMessage(L"WIDCOMM_WM_BTRADIO_OFF");
       
      // Получаем HWND окна BTTrayCE.exe
      HWND bt_hwnd = FindWindow(L"WCE_BTTRAY", 0);
       
      // Включаем Bluetooth
      SendMessage(bt_hwnd, WIDCOMM_WM_BTRADIO_ON, 0, 0);
       
      // Выключаем Bluetooth
      SendMessage(bt_hwnd, WIDCOMM_WM_BTRADIO_OFF, 0, 0);
      Q: Не могу открыть COM-port.
      A: В WCE после названия порта необходимо поставить двоеточие.
      Пример:
      ExpandedWrap disabled
        CreateFile( _T("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );


      Добавлено
      Q: Переношу свою программу, общающуюся с определенным устройством через СОМ-порт, на WCE. Но компилятор почему-то ругается на функцию GetOverlappedResult.
      A: Дело в том, что Windows CE не поддерживает асинхронную работу с COM-портом.
      Сообщение отредактировано: ASMerg -
      user posted image

      user posted image
        Q: Как создать toolbar в Windows CE?
        A: Посмотрите пример здесь: http://msdn.microsoft.com/library/default....g_a_Toolbar.asp

        Q: Как создать меню в Windows CE?
        A: Например, как часть CommandBar'а. Посмотрите пример здесь: http://msdn.microsoft.com/archive/default...._barbitmaps.asp
          Возможно какаято ошибка но в приведенном выше коде мне не понятно
          HANDLE IPAQ_handle = LoadLibrary(L"iPAQUtil.dll"); как так тоже можно грузить библиотеку? Ну может и я чего незнал до сего дня (ладно).
          Но вот выгружать таким образом FreeLibrary(IPAQ_handle); точно не получается ембеддет ругается . Но если переделать и сделать так:
          HINSTANCE IPAQ_handle = LoadLibrary(L"iPAQUtil.dll"); тогда все работает и выгружается так:
          FreeLibrary(IPAQ_handle); но вот у меня на iPAQ HP 5455 замечен такой глюк все включается и работает но вот при выборе выключить вроде на несколько сек выключается а потом лампочка снова загорается и вся машинка жутко начинает тормозить.... мож что не так поясните?
            Q: Как включить курсор ожидания (песочные часы)?
            A: Нужно использовать CWaitCursor wait;
              Q: как сделать, чтобы подсветка не выключалась сама?

              A: вот:

              ExpandedWrap disabled
                DWORD BacklightACT=0,BacklightDCT=0;
                 
                void BacklightON() {
                 
                HKEY key;
                DWORD dwDesc = REG_OPENED_EXISTING_KEY;
                 
                if (RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("ControlPanel\\Backlight"),
                0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS) {
                 
                DWORD dwType = REG_DWORD;
                DWORD tmpT = 0x7FFFFFFF;
                DWORD dwS;
                 
                RegQueryValueEx(key,TEXT("BatteryTimeout"),0,&dwType,(PBYTE)&BacklightDCT,&dwS);
                RegQueryValueEx(key,TEXT("ACTimeout"),0,&dwType,(PBYTE)&BacklightACT,&dwS);
                 
                RegSetValueEx(key,TEXT("BatteryTimeout"),0,dwType,(PBYTE)&tmpT,4);
                RegSetValueEx(key,TEXT("ACTimeout"),0,dwType,(PBYTE)&tmpT,4);
                 
                RegCloseKey(key);
                 
                HANDLE hEvent =
                CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
                 
                if (hEvent) {
                SetEvent(hEvent);
                CloseHandle(hEvent);
                }
                }
                }
                 
                void BacklightNORMAL() {
                 
                HKEY key;
                 
                if (RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("ControlPanel\\Backlight"),
                0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS) {
                 
                DWORD dwType = REG_DWORD;
                 
                RegSetValueEx(key,TEXT("BatteryTimeout"),0,dwType,(PBYTE)&BacklightDCT,4);
                RegSetValueEx(key,TEXT("ACTimeout"),0,dwType,(PBYTE)&BacklightACT,4);
                 
                RegCloseKey(key);
                 
                HANDLE hEvent =
                CreateEvent(NULL, FALSE, FALSE, TEXT("BackLightChangeEvent"));
                if (hEvent) {
                SetEvent(hEvent);
                CloseHandle(hEvent);
                }
                }
                }



              http://www.handy.ru/board/viewtopic.php?t=54250
              Сообщение отредактировано: Kuss -
              8 тоже в какой то степени 2...
                Цитата EL[michlen] @
                использовать Microsoft Active Sync.


                Q: Active Sync не хочет устанавливаться под Vista, что делать?
                A: Использовать Microsoft Device Mobile Center.
                Ходил в бухгалтерию за авансом. Дали. И аванс тоже :)
                  Q:
                  Цитата wandererbk @
                  Уважаемые, прошу помощи с VS 2008. Нужен как бы мини faq по тому как написать "Hello, world!" для мобильных устройств.

                  A:
                  Цитата Fester @
                  1) при инсталляции студии нужно выбрать создание приложений для smart devices
                  2) нужно скачать SDK нужной операционной системы (в принципе со студией устанавливается SDK для Windows Mobile и PocketPC)
                  3) Create project -> Smart Devices -> выбираешь тип проекта, например MFC Smart Device Application -> выбираешь платформу -> проходишь все остальные странички визарда -> компилишь и все работает :)
                  "Бубен Team Edition for Developers"
                  ULLib | ULj2me
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,1087 ]   [ 15 queries used ]   [ Generated: 9.12.19, 20:22 GMT ]