如何让移动应用程序保持领先?

时间:2009-04-14 13:41:12

标签: .net windows-mobile compact-framework

我正在为Windows Mobile开发移动应用程序。 我希望系统在启动时默认启动应用程序,并且用户不能将其最小化。

因此,只有此应用程序可用,所有其他功能都被禁用。

我确信我可以定义一个在启动时执行的启动器。但是我想到了一些问题:是否会有一些内存优化?我的意思是,因为只有一个应用程序可用和使用,可能会禁用其他一些程序,这可能会减少使用内存?

你有这个目的的链接吗?

编辑:感谢您的回答。 我阅读了有关自助服务终端模式的链接,并发现了另一篇关于此主题的非常有趣的帖子:this blog

它说对于自助服务终端模式应用程序,从长远来看,使用Windows CE而不是Windows移动似乎更好,因为前者更容易适应这些需求。

3 个答案:

答案 0 :(得分:7)

以后可能会发布更多有用的内容,但是现在我可以告诉你你要搜索Google的术语是:“kiosk模式”。

更新 - 有用的东西(希望如此)

现在坦率地说,任何自助服务终端模式或多或少都是黑客攻击。 Windows Mobile不是为它设计的,当你遇到越来越多的边缘情况时,你会发现奇怪的差距,但是对于大多数程序而言,以下就足够了:


任务1 - 覆盖UI和任务栏,以便无法访问它:

在主窗体上将WindowState设置为Maximized,将FormBorderStyle设置为None。 在较旧的操作系统上,您可能需要实际禁用任务栏本身并将表单移到其顶部。这是通过PInvoking实现的:

使用参数“HHTaskBar”的FindWindow(这可能取决于平台,HHTaskbar适用于Pocket PC 2003)和String.Empty

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

EnableWindow使用FindWindow中的IntPtr并使用false

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

ShowWindow使用FindWindow的IntPtr和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);

这是相当复杂的,它可能更好地指向像this one这样的指南来解释理论。基本前提是发现恼人的“特殊键”的键码,然后通过钩子阻止它们(即不要传递它们)。

如果你正在研究CF,我建议也要深入研究OpenNETCF,因为我相信它已经有了一个全局的KeyHook。

正如我之前所说,这并不完美,IIRC的音量控制是不可阻挡的,如果您没有在注册表中设置各种标志,则可能是新的无线网络等通知可能会侵入您的信息亭模式(告诉它不要这样做:))。

尽管如此,这并不是那么费力,而且对于大多数应用来说都应该足够了。


任务3 - 让您的应用从启动开始运行

根据器件的不同,这个位可能会有所不同。如果您希望保留托管代码,问题是NETCF不会预先安装在某些设备上。在大多数情况下,您可以编写一个位于autorun目录中的非托管引导程序(应该有一个,检查制造商的文档),然后安装.NETCF,您的应用程序,然后运行您的应用程序。如果您不想亲自处理非托管代码,那么大多数硬件制造商都会提供某种脚本系统来设置您认为合适的设备。然而,这些可能会有不同程度的有效性。

答案 1 :(得分:3)

您想以“Kiosk模式”运行设备。实际上,Windows Mobile设备无意在Kiosk模式下运行。如果可以选择要使用的设备,请选择可以修改映像的Windows CE设备。 Windows CE设备可以选择以Kiosk模式运行。这是最好的解决方案,但是您需要Platform Builder和可以下载图像的设备。

对于Windows Mobile,您可以“模拟”自助服务终端模式。这是你需要做的:

  • 在启动时启动您的应用程序。
  • 全屏显示您的应用。应该隐藏任务栏。
  • 拦截可以导航您离开应用程序的硬件按钮
  • 如果其他程序在启动时运行,请禁用它们。通常程序在启动时不会启动,因此您不必担心这一点。

article可能是一个起点。我认为实施通用解决方案将很困难甚至不可能。而是专注于单个设备。

答案 2 :(得分:1)

以下是关于将设备置于Kiosk模式的article on CodeProject

这对您来说至少是一个启动器,但请务必注意文章中列出的有关样本将使用哪些设备的警告!