在恢复最小化窗口之前请求密码

时间:2012-01-23 12:58:31

标签: c# .net winforms

我正在搜索如何在恢复最小化窗口之前询问密码。

实际上,当我恢复窗口时,在显示密码对话框之前,主窗体是可见的。 (我使用“调整大小”事件在表单还原时调用我的密码对话框。)

但我需要在主窗体可见之前显示密码对话框(因为它包含未经授权的人无法看到的敏感数据)

在验证passord之前,任何想法都要使主窗体不可见。

感谢

5 个答案:

答案 0 :(得分:5)

您可以处理表单的Resize事件,并在最小化时使所有控件不可见。

然后,依次处理正在恢复的表单的Resize事件,请求密码并再次显示所有控件。

E.g:

private void MyForm_Resize(object sender, EventArgs e)
{
    if ( WindowState == FormWindowState.Minimized )
    {
        // Hide controls.
    }
    else if ( WindowState == FormWindowState.Normal )
    {
        // Ask for password, then show controls.
    }
}

为了简化控件的显示/隐藏,只需使用Panel控件作为表单的唯一直接子项,将所有控件放在此面板中并使其成为可见/隐身:

enter image description here

(图片中的绿色代码表示Panel控件)

答案 1 :(得分:4)

这听起来像是一种解决方法。为什么不创建覆盖面板或使用窗口内容的可见性?然后,您可以完全控制人们可以看到的内容。

如前所述,应用预览(以及alt +标签,窗口+标签等)也会显示内容。

答案 2 :(得分:1)

您可以将表单的Visible - 属性设置为false,直到输入密码,这样表单才真正可见,但我同意Aphelion的说法,叠加效果可能更好选择...

答案 3 :(得分:0)

更安全/更可靠的方法是在最小化时简单地清除应用程序的内容。

给你创建一个文本框的叠加层输入密码,你就是金色的。

答案 4 :(得分:0)

所有提议的解决方案都不起作用: 在调整大小事件发生之前,Win7似乎会截取您的应用程序的屏幕截图,因此即使您添加了一个面板(或者如果您尝试隐藏某些控件),主窗体仍然可以在缩略图中看到。

我发现的解决方案:点击最小化按钮并在主窗体上显示一个面板 - >这发生在调整大小事件之前,Windows 7将此图片作为缩略图。

和代码示例:

    private const int WM_SYSCOMMAND = 0x0112; 
    private const int SC_MINIMIZE = 0xf020;
    protected override void WndProc(ref Message m) 
    { 
        if (m.Msg == WM_SYSCOMMAND) 
        { 
            if (m.WParam.ToInt32() == SC_MINIMIZE) 
            { 
                m.Result = IntPtr.Zero; 
                panel1.Height = this.Height; // cover the whole form
                panel1.Width = this.Width;
                panel1.Visible = true; // make it visible
            }
        } 
        base.WndProc(ref m); 
    }