以后可能会发布更多有用的东西,但现在我可以告诉你,你想在 Google 上搜索的词是:“kiosk mode”。
更新 - 有用的东西(希望如此)
坦率地说,任何信息亭模式或多或少都是一种黑客行为。 Windows Mobile 不是为它设计的,当您遇到越来越多的边缘情况时,您会发现奇怪的差距,但是对于大多数程序而言,以下内容就足够了:
任务 1 - 覆盖 UI 和任务栏,使其无法访问:
在您的主窗体上,将 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);
使用 FindWindow 中的 IntPtr 和 false 启用窗口
[DllImport("coredll.dll", SetLastError=true)]
public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
带有来自 FindWindow 和 0 (SW_HIDE) 的 IntPtr 的 ShowWindow
[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 这样的指南来解释理论。基本前提是发现恼人的“特殊键”的keycode,然后通过钩子将其屏蔽(即不要传递)。
如果您正在研究 CF,我建议您也研究一下 OpenNETCF,因为我相信它内部已经有一个全局 KeyHook。
正如我之前所说,这并不完美,IIRC 音量控制是不可阻止的,如果您不在注册表中设置各种标志,新无线网络等通知可能会侵入您的信息亭模式(告诉它不要那样做:))。
不过,这并不费力,对于您的大多数应用来说应该足够了。
任务 3 - 让您的应用从启动开始运行
根据设备的不同,这可能会有所不同。如果您想保留托管代码,问题是 NETCF 未预装在某些设备上。在大多数情况下,您可以只编写一个位于 autorun 目录中的非托管引导程序(应该有一个,检查制造商的文档),然后安装 .NETCF、您的应用程序,然后运行您的应用程序。如果您不想弄脏非托管代码,那么大多数硬件制造商都会提供某种脚本系统来设置您认为合适的设备。然而,这些可能会产生不同程度的效果。