как заставить мобильное приложение оставаться на вершине? - PullRequest
3 голосов
/ 14 апреля 2009

Я занимаюсь разработкой мобильного приложения для Windows Mobile. Я хотел бы, чтобы приложение запускалось по умолчанию системой при запуске, и пользователи не могут минимизировать его.

Так что доступно только это приложение, все остальные функции отключены.

Я уверен, что смогу определить модуль запуска, который выполняется при запуске. Но некоторые проблемы приходят мне на ум: могут ли быть некоторые оптимизации памяти? Я имею в виду, поскольку только одно приложение доступно и используется, может быть, некоторые другие программы могут быть отключены, что может позволить использовать меньше памяти?

У вас есть какие-либо ссылки на эту цель?

РЕДАКТИРОВАТЬ : Спасибо за ваши ответы. Я прочитал ваши ссылки о режиме киоска и нашел еще один очень интересный пост на эту тему: этот блог

В нем говорится, что для приложений в режиме киоска в долгосрочной перспективе, по-видимому, лучше использовать Windows CE вместо Windows Mobile, поскольку первое легче адаптировать к этим требованиям.

Ответы [ 3 ]

7 голосов
/ 14 апреля 2009

Возможно, вы сможете публиковать больше полезных вещей позже, но сейчас я могу сказать вам, что вы хотите найти в Google: "режим киоска".

Обновление - Полезные вещи (надеюсь)

Теперь, чтобы быть откровенным, любой режим киоска является более или менее взломом. Windows Mobile не предназначена для этого, и по мере того, как вы будете попадать во все более и более крайние случаи, вы обнаружите странный пробел, однако для большинства программ достаточно следующего:


Задача 1 - Закройте пользовательский интерфейс и панель задач, чтобы к ней нельзя было получить доступ:

В основной форме установите для WindowState значение Maximized и для FormBorderStyle значение None. В старых ОС вам может понадобиться отключить саму панель задач и переместить форму поверх нее. Это достигается с помощью PInvoking:

FindWindow с аргументом "HHTaskBar" (это может зависеть от платформы, HHTaskbar работает для Pocket PC 2003) и String.Empty

[DllImport("coredll.dll", EntryPoint="FindWindowW", SetLastError=true)]
private static extern IntPtr FindWindowCE(string lpClassName, string lpWindowName);

EnableWindow с IntPtr из FindWindow и false

[DllImport("coredll.dll", SetLastError=true)]
public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);

ShowWindow с IntPtr из FindWindow и 0 (SW_HIDE)

[DllImport("coredll.dll")]
public static extern bool ShowWindow( IntPtr hwnd, int nCmdShow);

Задание 2 - Предотвращение использования жестких ключей приложения.

Вы знаете, нажмите оранжевую и левую кнопку, и он автоматически откроет Pocket Outlook. Чтобы сделать это, я собираюсь побить ранг и рекомендовать единственный приемлемый способ сделать это - использовать недокументированный вызов Win32 API. Это совершенно стабильный вызов, и каждый день у меня работает целый ряд проектов, использующих его. Я полагаю, что в будущем обновлении мне может понадобиться изменить код, если он будет удален, так что имейте это в виду.

Вы захотите настроить низкоуровневую системную широкую клавиатуру с помощью вызова PInvoke:

[DllImport("coredll.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId);

Это достаточно сложно, и, вероятно, лучше просто указать на руководство типа , которое , чтобы объяснить теорию. Основная предпосылка состоит в том, чтобы обнаружить код клавиши раздражающих «специальных клавиш», а затем заблокировать их через крючок (т.е. не передавать их).

Если вы работаете над CF, я предлагаю также покопаться в OpenNETCF, так как считаю, что в нем уже есть глобальный KeyHook.

Как я уже говорил, это не идеально, и IIRC регулятор громкости не блокируется, и возможно, что уведомление, такое как новая беспроводная сеть, может нарушить ваш режим киоска, если вы не установите различные флаги в реестре ( сказать не делать этого :)).

Тем не менее, это не так много усилий, и этого должно быть достаточно для большинства ваших приложений.


Задание 3 - Запуск приложения с самого начала

Этот бит может немного отличаться в зависимости от устройства. Если вы хотите остаться в управляемом коде, проблема в том, что NETCF не поставляется предварительно установленным на некоторых устройствах. В большинстве случаев вы можете просто написать неуправляемый загрузчик, который находится в каталоге автозапуска (он должен быть, проверьте документы производителя), установить .NETCF, ваши приложения и затем запустить ваши приложения. Если вы не хотите запачкать руки неуправляемым кодом, то большинство производителей оборудования предлагают какую-то систему сценариев для настройки устройства по своему усмотрению. Однако они могут работать с различной степенью эффективности.

3 голосов
/ 14 апреля 2009

Вы хотите запустить свое устройство в «режиме киоска». На самом деле, устройства Windows Mobile не предназначены для работы в режиме киоска. Если вы можете выбрать устройство, которое собираетесь использовать, выберите устройство Windows CE, для которого вы можете изменить изображение. Устройства Windows CE могут работать в режиме киоска. Это лучшее решение, однако вам понадобится Platform Builder и устройство, на которое можно загрузить образ.

Для Windows Mobile вы можете «имитировать» режим киоска. Вот что вам нужно сделать:

  • Запустите ваше приложение при запуске.
  • Сделайте ваше приложение полноэкранным. Панель задач должна быть скрыта.
  • Перехватить аппаратные кнопки, которые могут отвлечь вас от вашего приложения
  • Если при запуске запускаются другие программы, отключите их. Обычно программы не запускаются при запуске, поэтому вам не стоит об этом беспокоиться.

Эта статья может быть отправной точкой. Я считаю, что будет сложно или даже невозможно реализовать общее решение. Вместо этого сосредоточьтесь на одном устройстве.

1 голос
/ 14 апреля 2009

Вот статья о CodeProject , в которой говорится о переводе устройства в режим киоска.

Это как минимум для вас, но обязательно обратите внимание на предупреждения, перечисленные в статье о том, на каких устройствах будет работать образец!

...