2009-08-18 44 views
1

是否有處理按Ctrl + Alt鍵+德爾重點任何組合方式。舉例來說,在測驗應用程序(Win Forms)中,用戶應該無法切換到其他窗口,直到測試結束。鍵盤上的C#贏如何捕獲招窗體應用程序(CTRL + ALT + DEL)

我能夠單獨捕獲按CtrlAlt鍵擊鍵,使用C#標準屬性。但是一旦他們用戶點擊了Del鍵。該控件不適用於我的應用程序,並且窗口處理它。

任何想法都會有所幫助。

謝謝。

+0

更好的解決方案是有一個測試在圖書館監考,像等 – 2009-08-18 12:22:23

+1

這只是衆多組合鍵之一... CTRL + SHIFT + ESC拉起任務管理器,他們可以從那裏開始一個新的程序。 – Hugoware 2009-08-26 15:00:09

+1

應用程序託管在自助服務終端電腦上還是安裝在家用電腦上? – 2009-08-26 15:08:33

回答

2

我不認爲這是一個好方法。

您正在爲用戶開發應用程序,不應該試圖阻礙他的一般行爲。

對於Alt + Ctrl + Del鍵組合閱讀​​3210文章。

+1

如果是這樣的話,所有參加考試的在線學生都可以從google獲得答案(通過更改爲瀏覽器)。 – vijaysylvester 2009-08-18 09:09:54

+0

他們可以使用另一臺機器或使用一本書也獲得答案。 – rahul 2009-08-18 09:34:26

+1

可以處理訪問另一臺機器或書籍。不阻止Ctrl-Alt-Del並允許它們運行瀏覽器實例使其變得過於簡單。 – Jim 2009-08-18 09:47:08

2

AFAIK,Ctrl + Alt + Del生成硬件中斷,不能通過軟件應用程序處理。可能這可以通過系統級別的鍵盤鉤子來處理,但我不太確定。

+0

不,系統級鉤子不能捕獲它 – 2013-10-01 09:40:12

5

根據其他答案,似乎這是可以做到的。雖然我非常不喜歡這個。舉例來說,你的程序應該由於某種原因掛起(上帝保佑...)。那麼你就會遇到這樣的情況,用戶可以做的唯一事情就是用電源按鈕關閉計算機(或拔下插頭......)。

這是一個很好的理由,這是很難做到的,而方法是不良記錄...

這看起來像是要走的路,唯一的辦法就是從皮埃爾 - 阿蘭·Vigeant評論如果這是一個電腦亭或其他東西。那麼這樣做真的很有意義!

+0

但我拿起了一個在線測試。它包含引用的功能 – vijaysylvester 2009-08-26 15:01:09

+0

請參閱RRUZ的答案,第二個鏈接是驚人的 – Andomar 2009-08-28 12:42:09

+0

@Andomar - 是的,我查看了該鏈接。並且溶劑是以下兩種中的一種: 1.禁用註冊表中的任務管理器(不捕獲keybord事件),導致消息顯示爲已禁用。 2.編寫屬於自己的MyGina.dll,覆蓋Ctr + Alt + Del的默認功能 這兩種方法都是通過對系統進行永久更改來「破解」系統。我認爲這些都不屬於僅僅在測驗應用程序運行期間禁用鍵序列的範圍。 – awe 2009-08-31 06:18:02

-1

將Form.TopMost設置爲true,每毫秒調用Form.Activate()並提高進程和入口線程優先級。

(你瞧,你的應用程序崩潰對窮人的用戶。)

+1

這對Control + Alt + Del問題沒有幫助。 – BlueSilver 2010-05-11 10:57:50

+0

+1,但它會解決用戶的問題 – 2013-10-01 09:36:38

0

嗯,沒有一個真正的答案老話題。

短版:

  • 你需要使用驅動程序捕獲系統的擊鍵
  • 爲此使用Interception API,它提供了用於這一目的簽名的驅動程序。
  • 爲了能夠使用Interception您需要下載並安裝WDK(Windows Driver Kid)
  • 要測試您的程序,請使用帶有測試系統的虛擬機。您不想在正在運行的生產系統中測試驅動程序。

龍版本:

是的,這是可能的。爲了能夠攔截這些組合鍵,你需要在內核層提供一個鍵盤驅動程序。解釋原因:通常Windows中有兩種不同類型的擊鍵。有系統按鍵(WM_SYSKEYDOWN或WM_SYSKEYUP)和非系統按鍵(WM_KEYDOWN或WM_KEYUP)。只有非系統擊鍵才能被鉤子打斷。這些擊鍵消息在驅動程序中生成,然後傳遞到系統消息隊列中。如果一個WM_SYSKEYDOWN或WM_SYSKEYUP在這個隊列中,那麼在Windows自己可以處理它之前,不可能將其刪除。

我該怎麼做才能防止將系統按鍵衝入SMQ?提供一個簽名的驅動程序來過濾這些。自己創建和簽署驅動程序並不是您可以做的最簡單的事情。但是我們可以使用API​​。 例如:Interception來自oblita。該api提供簽名的驅動程序與鍵盤或低級驅動程序進行交互。

參考的重要事件窗口下:https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v=vs.85).aspx

相關問題