2010-03-10 58 views
2

我正在開發一個在線測驗客戶端,我們使用專門定製的Linux發行版,其中只包含測驗客戶端軟件以及文本編輯器和其他實用程序軟件。當用戶開始測驗時,我想阻止他/她最小化窗口/關閉窗口/切換到桌面或其他窗口。測驗只能使用鼠標進行,因此我需要在測驗期間完成禁用鍵盤。我怎麼能這樣做,使用Qt或Mono?如果需要,我準備使用任何低級庫/驅動程序。阻止Linux應用程序中的所有鍵盤輸入(使用Qt或Mono)

回答

1

你看過XGrabKeyboard?這應該做一個全球性的鍵盤。

+0

謝謝。有效! – BlueSilver 2010-03-15 04:12:15

+0

我無法使用它阻止Control + Alt + F1。有什麼辦法可以做到嗎? – BlueSilver 2010-03-19 09:03:06

+0

它必須在更高層次上處理。我沒有任何經驗,但我會從這裏開始: http://www.charvolant.org/~doug/xkb/html/index.html – Chris 2010-03-20 19:43:52

1

您是否嘗試過使用EventFilter?你有機會阻止所有涉及到,作爲實例,按鍵事件...

點擊此處瞭解詳情:http://qt.nokia.com/doc/4.6/eventsandfilters.html

希望它能幫助!

喜歡的東西:

bool MyWidget::event(QEvent *event) 
{ 
    if (event->type() == QEvent::KeyPress) 
    { 
     return true; 
    } 
    return QWidget::event(event); 
} 
+0

我可以使用它來阻止「全局」按鍵,如alt + tab,control + alt + del?我不這麼認爲。 – BlueSilver 2010-03-10 12:51:03

+0

編輯:我試過了,你說得對,它沒有用多鍵按鍵工作......我不明白爲什麼......應該有一些事情可以「走動」這個問題......你也可以看看KeyLogger的例子... – 2010-03-10 13:49:19

3

您可以使用的QWidget :: grabKeyboard和QWidget的:: grabMouse,並請注意在評論中警告:

警告:錯誤的鼠標抓取 應用經常鎖定 終端。使用 這個功能極其謹慎,並且考慮使用 的-nograb命令行選項,而 調試。

+0

當一個應用程序有一個手柄掛起或長時間無響應時,非常煩人,所以請小心使用。如果你遇到過這種情況,唯一的解決方法是按下sysrq + alt + r(切換到基本的內核鍵盤處理程序),然後alt + f1(切換到文本控制檯),然後關閉應用程序。你需要通過'echo 1>/proc/sys/kernel/sysrq'打開「magic sysrq」鍵。 – liori 2010-03-10 14:11:19

+0

因此,我可以使用QWidget :: grabKeyboard來完全阻止所有的鍵盤輸入,甚至像Alt + Tab,Control + Alt + F1,Control + Alt + Del等特殊鍵盤輸入。另外,它會在GNOME中工作嗎?可以直接從Mono調用這個函數嗎? – BlueSilver 2010-03-11 03:52:37

+0

我沒有試過這個GNONE和Mono。你可以試試嗎?請確保在測試小部件上添加「退出」按鈕。 – 2010-03-11 04:49:01

相關問題