【问题标题】:delphi Freeze Screen on windowswindows上的delphi冻结屏幕
【发布时间】:2012-06-25 21:57:39
【问题描述】:

有什么方法可以冻结屏幕并只显示一个处于活动状态的表单(只有该表单可以接收来自用户的输入)。

我描述的例子就像windows用户从开始菜单点击关机一样。它显示关闭、重新启动等选项,并且不允许用户进行除该表单之外的输入。 或者当使用 Tune Up 注册表优化器时,它会要求您关闭所有其他正在运行的应用程序,然后它会显示一个带有进度条的蓝色窗口,但用户既不能关闭此窗口也不能进行其他输入。

我知道模态形式,但有没有其他方法可以做到这一点。

有什么想法吗?

【问题讨论】:

  • 我很好奇,你为什么要这样做?
  • 你希望 ShowModal 不会给你什么行为? Fr instance Tune up,确实让你做其他输入,否则你将无法关闭它说你必须的应用程序......
  • 您是否正在尝试制作自助服务终端应用程序?

标签: delphi modal-dialog


【解决方案1】:

要真正停止对其他应用程序的输入,您可能需要使用 SetWindowsHookEx() 来安装全局消息挂钩(我认为您想使用 WH_CBT 选项)以便将消息发送到其他窗口(当然,您是需要管理员权限才能做到这一点)。

然而,还有另一种方法:a) 让您的程序截取显示的屏幕截图,b) 对位图进行后处理以使其“变灰”,以及 c) 完全显示您的应用程序-screen(有一些简单的方法可以调整应用程序的大小以覆盖甚至覆盖任务栏)并将应用程序表单的背景设置为您在步骤 A 中截取的屏幕截图并在步骤 B 中显示为灰色。您最终得到的是一个简单的图像显示看起来很像用户的桌面,但窗口当然不可点击。

【讨论】:

  • 但是如果你不偷我的键盘,我仍然可以破解你的应用程序 ;-)
  • TLama:它不是 my 应用程序,因为我知道最好不要尝试:如果不编写自己的 GINA dll,就无法捕获 Ctrl-Alt-Del登录时。 Alt-Tab 你可以用钩子捕捉,但是……那又怎样?如果我无法在应用程序中使用 Alt-Tabbing,我将使用 Ctrl-Alt-Del 弹出任务管理器并终止该进程。那为什么还要挂键盘呢?
  • 不管怎样,这个讨论基本上是stackoverflow.com/questions/5028944/…的翻版
  • 与其截取用户桌面并对其进行操作,更简单的方法是将全屏Form的背景颜色设置为纯灰色,然后通过Form的@使其半透明987654322@财产。用户的实际桌面将显示出来,但仍会显示为被遮盖且无法点击。
  • @Erik 你关于 GINA 的 cmets 已经过时了,它随着 Vista 而死
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
相关资源
最近更新 更多