稍後可能會發布更多有用的內容,但現在我可以告訴你,您要搜索Google的術語是:「kiosk模式」。
更新 - 有用的東西(希望)
現在坦白任何Kiosk模式或多或少是一個黑客。 Windows Mobile是在不適合它,當你進入越來越多的邊緣情況下,你會發現奇差距,但以下大多數程序的目的是充分的:
任務1 - 覆蓋用戶界面,並使其無法訪問任務欄:
在您的主要形式設置的WindowState爲最大化和FormBorderStyle爲None。 在較舊的操作系統上,您可能需要實際禁用任務欄本身,並將表單移至其頂部。這是通過PInvoking實現:
FindWindow函數與參數 「HHTaskBar」(這可能依賴於平臺,HHTaskbar工作的Pocket PC 2003)的String.Empty與IntPtr的從FindWindow函數和虛假
[DllImport("coredll.dll", EntryPoint="FindWindowW", SetLastError=true)]
private static extern IntPtr FindWindowCE(string lpClassName, string lpWindowName);
EnableWindow
[DllImport("coredll.dll", SetLastError=true)]
public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
與IntPtr的從FindWindow函數和0(SW_HIDE)的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解釋理論。基本前提是發現刺激性「特殊鍵」的鍵碼,然後通過鉤子將其阻斷(即不要通過它們)。
如果你在CF上工作,我建議挖掘OpenNETCF,因爲我相信它已經有一個全局的KeyHook。
正如我之前所說的,這並不完美,IIRC音量控制也不可阻擋,如果您沒有在註冊表中設置各種標誌,新的無線網絡等通知可能會侵入您的信息亭模式(告訴它不要這樣做:))。
儘管如此,它並沒有太多的努力,它應該足以應付大部分應用程序。
任務3 - 讓您的應用運行從啓動
這是可以根據不同的設備上的公平的點點滴滴。如果你想留在託管代碼中,問題是NETCF不會在某些設備上預先安裝。在大多數情況下,您只需編寫一個位於自動運行目錄中的非託管引導程序(應該有一個,檢查製造商的文檔),然後安裝.NETCF,您的應用程序,然後運行您的應用程序。如果你不想用非託管代碼弄髒你的手,那麼大多數硬件製造商提供某種腳本系統來設置你認爲合適的設備。然而,這些可能會有不同程度的效果。
+1爲了全面覆蓋。微調 - 您在更新中說過Windows CE不適用於信息亭模式。這是不正確的。 * Windows Mobile *不是,但Windows CE肯定可以成爲一個信息亭 - 事實上,它可以鎖定到一個應用程序,甚至根本沒有用戶界面。 – ctacke 2009-04-15 03:05:11