.net 如何在Windows Vista和W7中使用安全桌面?

.net 如何在Windows Vista和W7中使用安全桌面?,.net,winapi,.net,Winapi,Windows Vista添加了一个新功能,称为“安全桌面”。它看起来很棒,真的吸引了用户的注意力。但是现在,我想在.NET/C#或Delphi/WIN32应用程序中使用这个桌面。并将其用于我自己的对话框,该对话框将要求用户提供大约5条不同但敏感的信息 有没有办法在.NET中使用它? 有没有办法在WIN32中使用它?如果你仔细想想,你会发现没有办法改变这个安全的桌面 安全桌面高于正常桌面,其他所有功能均已禁用。而且它不允许正常程序干扰它(否则它将是无用的) 此外,它还以提升的权限运行,因此,如果

Windows Vista添加了一个新功能,称为“安全桌面”。它看起来很棒,真的吸引了用户的注意力。但是现在,我想在.NET/C#或Delphi/WIN32应用程序中使用这个桌面。并将其用于我自己的对话框,该对话框将要求用户提供大约5条不同但敏感的信息

有没有办法在.NET中使用它?
有没有办法在WIN32中使用它?

如果你仔细想想,你会发现没有办法改变这个安全的桌面

安全桌面高于正常桌面,其他所有功能均已禁用。而且它不允许正常程序干扰它(否则它将是无用的)

此外,它还以提升的权限运行,因此,如果您单击“是”,它可以提升任何调用

您所能做的就是尝试通过拍摄当前桌面的屏幕截图来模拟安全桌面,使该图像变暗,然后创建一个顶级窗口,在其中绘制该图像,然后显示一个带有按钮的对话框(也作为顶级窗口)。
但当然,一个简单的alt选项卡将允许用户切换回原来的状态。

您可能需要询问创建KeePass的团队。他们在程序中实现了在windows Secure Desktop中输入数据库主密码的功能,以避免键盘记录者


此外,他们的程序是开源的,可以在这里下载源代码:

似乎安全桌面是通过使用以下Windows API方法实现的:

  • CreateDesktop()
  • SwitchDesktop()
  • CloseDesktop()
  • SetThreadDesktop()
  • GetThreadDesktop()
  • GetCurrentThreadId()


这并不是我所希望的答案。此外,安全桌面似乎被多个Windows应用程序使用。不仅是UAC,还有CardSpace。如果Windows不为任何其他应用程序提供此功能,那将很奇怪,尽管我怀疑使用它需要一些类似火箭科学的代码。。。