2

在 DDE 事件中,我的程序会加载一个文件并应该弹出到前台。我正在使用

show;

当我隐藏窗口时,它似乎只像那时那样工作。

所以我加了

bringtofront;

如果它被隐藏、关闭、最小化或在图标托盘中,这同样有效,但如果它在另一个窗口下打开则无效。

我什至尝试了一些 hacky 的东西,比如

windowstate:=wsminimized;
windowstate:=wsnormal;

试图强迫它显示,但无济于事。我知道代码正在运行,因为我在此块的任一侧都有打印输出,并且没有可能卡住的条件语句。

4

2 回答 2

2

您是否尝试过SetForegroundWindow和/或 SetActiveWindow?另请参阅有关此主题的MSDN 信息。

于 2009-03-07T12:15:19.227 回答
1

SetForegroundWindow 并不总是有效。事实上,现在它不太可能起作用,因为应用程序不应该抓住焦点,它们只能放弃它。MS 多年来一直在努力防止应用程序窃取输入焦点。阅读Raymond Chen对此博客条目的评论,了解一些历史。

所以,如果你自己是前台应用程序,你可以 SetForegroundWindow 到另一个应用程序,一切都会很好。如果您不是前台应用程序,那么唯一可能发生的事情是任务栏按钮将开始闪烁。

只是为了增加一些混乱,确切的行为取决于 Windows 版本,所以会发生什么取决于您正在运行的 Windows 类型 - 他们已经搞砸了很长时间:-)。

于 2009-03-07T16:14:57.263 回答