2009-04-14 22 views
3

我正在爲Windows Mobile開發移動應用程序。 我希望系統在啓動時默認啓動應用程序,並且用戶不能將其最小化。如何使移動應用程序保持在最前?

所以只有這個應用程序可用,所有其他功能都被禁用。

我確定我可以定義一個啓動程序,它在啓動時執行。但是一些問題進入我的腦海:是否有一些內存優化?我的意思是,因爲只有一個應用程序可用並且可以使用,所以也許可以禁用其他一些程序,這可以允許使用較少的內存。

你有這個目的的任何鏈接?

編輯:謝謝你的回答。 我看了你的關於Kiosk模式的鏈接,發現有關此主題的另一種非常有趣的帖子:this blog

它說,爲Kiosk模式的應用程序,它似乎是從長遠來看更好,而不是使用的Windows Mobile的Windows CE,因爲前者更容易適應這些需求。

回答

7

稍後可能會發布更多有用的內容,但現在我可以告訴你,您要搜索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,您的應用程序,然後運行您的應用程序。如果你不想用非託管代碼弄髒你的手,那麼大多數硬件製造商提供某種腳本系統來設置你認爲合適的設備。然而,這些可能會有不同程度的效果。

+3

+1爲了全面覆蓋。微調 - 您在更新中說過Windows CE不適用於信息亭模式。這是不正確的。 * Windows Mobile *不是,但Windows CE肯定可以成爲一個信息亭 - 事實上,它可以鎖定到一個應用程序,甚至根本沒有用戶界面。 – ctacke 2009-04-15 03:05:11

3

您想在「Kiosk模式」下運行您的設備。實際上,Windows Mobile設備不打算在Kiosk模式下運行。如果您可以選擇要使用的設備,請選擇一個Windows CE設備,您可以爲其修改圖像。 Windows CE設備確實有一個選項可以在Kiosk模式下運行。這是最好的解決方案,但是你需要Platform Builder和一個可以下載圖像的設備。

對於Windows Mobile,您可以「模擬」Kiosk模式。這是你需要做的:

  • 在啓動時啓動你的應用程序。
  • 使您的應用程序全屏。任務欄應該隱藏。
  • 攔截硬件按鈕,可以將您導航遠離應用程序
  • 如果其他程序在啓動時運行,請禁用它們。通常程序不會在啓動時啓動,所以您不應該擔心這一點。

article可能是一個起點。我相信實施一個通用的解決方案將是困難的,甚至是不可能的。而是專注於單個設備。

1

這是一個article on CodeProject,它討論如何將設備置於Kiosk模式。

這至少是您的首選,但一定要注意文章中列出的警告,說明該樣本可以使用哪些設備!

相關問題