.net 如何使移动应用程序保持领先地位?

.net 如何使移动应用程序保持领先地位?,.net,windows-mobile,compact-framework,.net,Windows Mobile,Compact Framework,我正在为Windows mobile开发一个移动应用程序。我希望应用程序在启动时由系统默认启动,并且用户不能最小化它 因此,只有此应用程序可用,所有其他功能都被禁用 我确信我可以定义一个启动器,它在启动时执行。但是我想到了一些问题:会有一些内存优化吗?我的意思是,因为只有一个应用程序可用和使用,也许其他一些程序可以被禁用,这可以减少内存的使用 你有任何与此相关的链接吗 编辑 谢谢你的回答。我读了你关于信息亭模式的链接,发现了另一篇关于这个主题的有趣文章 它说,对于kiosk模式的应用程序,从长远

我正在为Windows mobile开发一个移动应用程序。我希望应用程序在启动时由系统默认启动,并且用户不能最小化它

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

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

你有任何与此相关的链接吗

编辑 谢谢你的回答。我读了你关于信息亭模式的链接,发现了另一篇关于这个主题的有趣文章


它说,对于kiosk模式的应用程序,从长远来看,使用windowsce而不是windowsmobile似乎更好,因为前者更容易适应这些需求。

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

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

坦率地说,任何信息亭模式或多或少都是一种黑客行为。Windows Mobile不是为它而设计的,当您进入越来越多的边缘情况时,您会发现一个奇怪的缺口,但是对于大多数程序来说,以下内容就足够了:


任务1-覆盖UI和任务栏,使其无法访问:

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

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

[DllImport("coredll.dll", EntryPoint="FindWindowW", SetLastError=true)]
private static extern IntPtr FindWindowCE(string lpClassName, string lpWindowName);
从FindWindow和false启用带有IntPtr的窗口

[DllImport("coredll.dll", SetLastError=true)]
public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
从FindWindow和0(SW_隐藏)显示带有IntPtr的窗口


任务2-防止硬连线应用程序键

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

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

[DllImport("coredll.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId);
这是相当复杂的,最好只是指向一个类似于解释理论的指南。基本前提是发现恼人的“特殊钥匙”的钥匙代码,然后通过钩子阻止它们(即,不要传递它们)

如果您正在使用CF,我建议您也深入研究OpenNETCF,因为我相信它已经有了一个全局键钩

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

尽管如此,这并不需要太多的努力,对于你的大多数应用来说应该已经足够了


任务3-让你的应用程序从启动开始运行


根据设备的不同,这是一个可以相差相当大的位。如果您想保留托管代码,问题在于某些设备上没有预装NETCF。在大多数情况下,您只需编写一个位于自动运行目录中的非托管引导程序(应该有一个,请查看制造商的文档),然后安装.NETCF、您的应用程序,然后运行您的应用程序。如果您不想让非托管代码弄脏您的手,那么大多数硬件制造商都会提供某种脚本系统来设置您认为合适的设备。但是,这些可能会产生不同程度的效果。

您希望在“Kiosk模式”下运行设备。事实上,Windows Mobile设备并不打算在kiosk模式下运行。如果可以选择要使用的设备,请选择一个Windows CE设备,您可以为其修改映像。Windows CE设备有一个选项可以在kiosk模式下运行。这是最好的解决方案,但是您需要平台生成器和可以下载图像的设备

对于Windows Mobile,您可以“模拟”信息亭模式。这是您需要做的:

  • 在启动时启动应用程序
  • 使您的应用程序全屏显示。任务栏应该是隐藏的
  • 截取可以引导您离开应用程序的硬件按钮
  • 如果其他程序在启动时运行,请禁用它们。通常程序不会在启动时启动,所以您不必担心这一点
这可能是一个起点。我相信实施通用解决方案将是困难的,甚至是不可能的。将注意力集中在单个设备上。

下面是一个关于将设备置于Kiosk模式的示例


这对您来说至少是一个开始,但请务必注意文章中列出的关于该示例将在哪些设备上工作的警告

+1表示全面覆盖。小更正-您在更新中说Windows CE不是为kiosk模式设计的。那是不对的。Windows Mobile不是,但Windows CE当然可以被做成一个信息亭——事实上,它可以被锁定到一个应用程序,甚至根本没有UI。
[DllImport("coredll.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId);