2011-08-16 41 views
4

我一直在使用收款機/收銀機應用程序。我們需要通過使用Alt + Esc,Ctrl + Alt + Del或Alt + Tab等組合來防止用戶退出應用程序,我們將爲退出提供單獨的自定義熱鍵。該應用程序將是全屏幕,沒有任何關閉按鈕。我已經完成了全屏沒有交叉按鈕的部分,但堅持禁用低系統級別的熱鍵。我如何在C#中執行此操作?任何幫助或替代方法(即設置用戶組權限以防止星形菜單/任務管理器或任何其他替代方法來實現目標),都會受到讚賞。防止用戶通過系統熱鍵退出Windows應用程序

編輯:我們使用WinForms。該應用程序將在Windows XP/Vista/7中運行。

+1

您是使用WinForms還是WPF? –

+0

@Philipp Schmid:更新了問題,對不起,我應該早些提及它。 –

+4

這個問題來自支持POS系統的戰壕中的人 - 當事物鎖定並且除了硬啓動之外無法關閉它時,您的支持人員將如何處理問題?我見過的每個在XP/Vista/Win7上運行的POS系統都有一種使用任務管理器關閉程序的方法,出於某種原因。如果你的應用程序被完全鎖定,它將無法響應你的熱鍵。 – David

回答

5

沒有直接的辦法可以擺脫Windows的標準行爲。 Windows用戶必須有可能殺死應用程序。如果應用程序不服從,系統將強制終止應用程序。

不過,也有一些小技巧,經常被病毒作者所採用,這裏有一些(不是廣泛):

  • 如果不允許所有的系統的快捷鍵是比較瑣碎,但CTRL-ALT-德爾並不之中他們。用示例應用程序查找this excellent code-project article
  • 構建一個DLL並注入其他對系統至關重要的進程中。容易做到,但要確保將應用程序從.NET移植到獨立的C++或其他語言,您不希望系統進程依賴於您加載的.NET版本。
  • 代替dll的建議,你可以創建一個類似shell擴展with a library like this one的東西,它允許你繼續使用.NET。這並不意味着這種事情,但它會迫使用戶殺掉explorer.exe以擺脫您的應用程序。
  • 創建一個可以與桌面交互的服務。通過正常方式限制服務的權利,這基本上與禁止用戶通過您提及的方式殺死您的應用程序具有相同的效果。
  • 顯然,您應該取消任何WM_CLOSEWM_EXITWM_KILL消息,並簡單地繼續「生活」。
  • 使用一個定位應用程序,這是大多數病毒掃描程序使用的:如果殺死一個進程,則該標記將重新啓動它。如果你殺了哨兵,它應該由主應用程序重新啓動。行爲不好,但有效。

但是,一般建議:不要這樣做。如果需要,允許用戶潛在地殺死該程序,否則將很難進行任何維護。唯一的「支持」方式是通過服務,在那裏你可以允許特殊用戶停止你的服務,並且不能通過任務管理器停止。

+0

好的,我們可以從應用程序端阻止除Ctrl + Alt + Del之外的所有內容嗎?無論如何,我支持保持Ctrl + Alt + Del的緊急狀態。 –

+0

@ShutterBug:很難禁用alt-tab和其他系統密鑰,但是如果您想要(系統掛鉤)則可以。殺死explorer.exe並僅運行你的應用程序更容易。這樣alt-tab不能做任何事情,任務管理器很難來(除非通過Ctrl-Alt-Del)。 – Abel

+0

@ShutterBug:另請參閱我的編輯關於如何通過代碼禁止系統寬熱鍵。 – Abel

相關問題