2013-04-26 43 views
0

我有一個內置超時功能的應用程序,它會在一段時間不活動後激活,並提示用戶輸入密碼。發生超時時模糊/隱藏窗口

當出現此密碼屏幕時,有時可能仍會讀取此窗口後面的一些敏感數據。

理想情況下,我想隱藏或模糊密碼對話框後面的窗口。但我願意接受其他可能相關的建議。

我假設我可以遍歷所有打開的窗口並將它們最小化,或者對它們做些別緻的事情來使它們上的數據不可讀。

任何想法的人?

謝謝,豐富

+0

這是一個桌面應用程序? (聽起來它,因爲你可以迭代窗口。) – zimdanen 2013-04-26 18:54:35

+0

什麼樣的應用程序? ASP.NET?的WinForms? – GalacticCowboy 2013-04-26 18:54:49

+0

我想最小化可能不是一個好主意 - 例如帶有Aero的Win 7即使是最小化的窗口也會記住縮略圖。 – Martin 2013-04-26 18:56:35

回答

0

好,我已經用下面的代碼實現這...

 foreach (Form f in Application.OpenForms) 
     { 
      f.Visible = false; 
     } 
     PasswordPrompt.ShowDialog(); 
     PasswordPrompt.Dispose(); 
     foreach (Form f in Application.OpenForms) 
     { 
      f.Visible = true; 
     } 

的「opactity」選項不起作用,因爲縮略圖仍顯示有完全不透明,這雖然幾乎是不可能的閱讀,是不理想的形式。

@Ginosaji,如果你想發佈一個類似的答案,我會給你一個「滴答」旁邊的答案,因爲你的評論指出我在正確的方向。

-2

Form.Hide()是你打算做什麼最簡單的解決方案。實際上,只要將不透明度設置爲0.1,就會隱藏你的表格,以至於只能看到「輪廓的鬼魂」。但是,如果您對某些美學表現感興趣,那麼您必須即興創作。例如,下面的代碼將逐步讓您的形式透明,然後再返回到不透明:

private void frmOpacity_Load(object sender, EventArgs e) 
{ 
this.Opacity = 0; 
for (double i = -1; i <= 1; i+= 0.005) 
{ 
this.Opacity = System.Math.Abs(i); 
Application.DoEvents(); 
System.Threading.Thread.Sleep(5); 
} 
} 

如果您有興趣瞭解更多這樣的想法,那麼你可以查看我的博客文章: http://dot-net-talk.blogspot.com/2013/04/some-windows-forms-magic-in-net.html

+2

-1。 Application.DoEvents()是有史以來最糟糕的解決方案。 – 2013-04-26 20:07:17

+0

同意@HighCore。 DoEvents不僅是一個可怕的想法,在這裏你甚至不需要它。您不需要抽取消息循環來使表單的不透明度發生變化。 – 2013-04-26 23:57:15