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

Out*_*und 3 .net compact-framework windows-mobile

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

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

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

你有这个目的的链接吗?

编辑:谢谢你的回答.我阅读了关于自助服务终端模式的链接,并发现了另一个关于这个主题的非常有趣的帖子:这个博客

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

Qui*_*ome 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);
Run Code Online (Sandbox Code Playgroud)

EnableWindow使用FindWindow的IntPtr和false

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

使用FindWindow的IntPtr和0(SW_HIDE)显示ShowWindow

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

任务2 - 防止硬连线的应用程序密钥.

你知道那些,按橙色和左键,它将自动打开Pocket Outlook.要做到这一点,我将在这里打破排名,并推荐我知道这样做的唯一可行的方法,即使用未记录的Win32 API调用.这是一个非常稳定的调用,我有一系列项目每天运行使用它我只想在未来的升级中我可能需要修改代码,如果它被删除,所以记住这一点.

您需要通过PInvoke调用设置一个低级系统范围的键盘钩子:

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

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

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

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

尽管如此,它并没有那么多的努力,它应该足够你的大多数应用程序.


任务3 - 让您的应用程序从启动运行

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

  • +1以获得全面覆盖.小修正 - 您在更新中说过Windows CE不是为kiosk模式设计的.那是不对的.*Windows Mobile*不是,但Windows CE肯定可以成为一个自助服务终端 - 实际上它可以锁定到一个应用程序甚至根本没有用户界面. (3认同)