2012-06-25 170 views
1

有什麼辦法可以凍結屏幕並只顯示一個表單活動(只有該表單可以接收來自用戶的輸入)。delphi凍結窗口上的屏幕

我描述的例子就像windows用戶從開始菜單點擊關機時一樣。它顯示諸如關機,重啓等選擇,並且不允許用戶進行除了該表單之外的輸入。 或使用Tune Up註冊表優化器時,它會要求您關閉所有其他正在運行的應用程序,然後顯示帶有進度條的藍色窗口,但用戶既不能關閉此窗口,也不能進行其他輸入。

我知道模態形式,但有沒有其他方式來做到這一點。

任何想法?

+1

我很好奇,你爲什麼要這樣做? –

+0

你想讓ShowModal不會給你什麼行爲? Fr實例調整,確實讓你做其他輸入,否則你將無法關閉它所說的你必須的應用程序...... –

+3

你想製作一個自助服務終端應用程序嗎? –

回答

0

要實際停止輸入到其他應用程序,您可能需要使用SetWindowsHookEx()來安裝全局消息鉤子(我認爲您想使用WH_CBT選項)以便將消息發送到其他窗口(當然,重新需要管理員權限來執行此操作)。

然而,有另一種方式:1)讓你的程序採取顯示,B)後處理位圖的截圖,以「灰色」出來,和c)顯示您的應用程序完全全屏(有簡單的方法來調整應用程序的大小以覆蓋甚至任務欄),並將您的應用程序表單的背景設置爲您在步驟A中截取的屏幕截圖,並在步驟B中將其顯示爲灰色。您最終看到的是一個簡單的圖像顯示,看起來很像用戶的桌面,但窗口當然不可點擊。

+0

但是,當你不會偷我的鍵盤,我仍然可以*破解*你的應用程序;-) – TLama

+0

TLama:它不會*我的*應用程序因爲我知道比嘗試更好:你可以不會在編寫自己的GINA dll時登錄時捕獲Ctrl-Alt-Del。 Alt-Tab你*可以用鉤子捕捉,但是......那麼是什麼?如果我將Alt-Tab從應用程序中取出,我只需使用Ctrl-Alt-Del彈出任務管理器並終止進程。那麼爲什麼還要鉤住鍵盤呢? –

+1

無論如何,這個討論基本上是一個重複http://stackoverflow.com/questions/5028944/how-can-i-make-a-system-modal-window?rq=1 –