我在Windows XP下使用Delphi 6编译的exe文件使用EnumWindows和GetWindowText的组合来查找具有特定标题的窗口(不属于exe本身)。
在Windows XP下,行为与预期一致。然而,在Vista计算机上,它似乎不起作用。
由于上面提到的Delphi版本不能在Vista上运行,我无法直接更改和测试。
但是,我将尝试在XP计算机上创建一个修改过的exe,输出一些额外的数据并将其复制到Vista计算机。
我想问一下是否有人知道在Vista上运行的Delphi 6编译的exe文件是否存在特定问题,包括EnumWindows / GetWindowText。
exe使用EnumWindows和GetWindowText来查找某个窗口的句柄,然后在计时器事件中解析该窗口的标题。窗口标题是应用程序名称以及在该应用程序中打开的文件的名称(如果打开了任何文件)。 Delphi exe分析/使用此文件名,对其执行某些操作并以某种方式运行。
在Vista上没有出现预期的行为,因此我认为找不到窗口句柄导致GetWindowText以某种方式不返回文本。当然另一个原因可能是EnumWindows无法正常工作,并且exe正在寻找的窗口的窗口句柄永远不会发送到EnumWindowsProc。
答案 0 :(得分:4)
假设从XP到Vista的窗口标题没有变化,这里可能出现的问题并不多。我猜测问题是由于UIPI造成的。这是Vista安全增强功能的一部分,它意味着进程只能将消息发送到具有相同或更低完整性级别的其他进程。这个其他进程是否正在升级?
除此之外,最好的办法是在调试器下运行它。 Delphi 6肯定会在Vista上运行。它是在UAC之前编写的,因此没有权利写入其安装目录。因此,将其安装到用户配置文件或C:\ Delphi6中的某个位置 - 基本上是标准用户具有写访问权限的任何地方。
最后,不要陷入运行Delphi升级的陷阱。如果确实这是一个问题,这将使UIPI问题感到困惑。
祝你好运!