2011-10-06 67 views
0

我有一个在Windows XP下使用Delphi 6编译的exe文件,该文件使用EnumWindows和GetWindowText的组合来找到一个窗口(不属于exe本身)和一个特定的标题。在Vista上的Delphi 6 EXE:GetWindowText的问题

该行为与Windows XP下的预期相同。但是在Vista电脑上,它似乎没有工作。

由于上述Delphi版本不能在Vista上运行,因此我无法直接更改和测试此版本。

但是,我会尝试在XP计算机上创建一个修改后的exe,输出一些额外的数据并将其复制到Vista计算机。

我只想问问任何人是否有任何信息是否有具体的问题已知的exe文件编译与运行在Vista上的Delphi 6关于EnumWindows/GetWindowText。

exe使用EnumWindows和GetWindowText来查找某个窗口的句柄,以便随后在一个计时器事件中解析该窗口的标题。窗口标题是应用程序名称加上在该应用程序中打开的文件的名称(如果有任何文件被打开)。 Delphi exe分析/使用这个文件名,对它做某事并以某种方式表现。

在Vista上不会出现预期的行为,因此我认为窗口句柄没有找到,导致GetWindowText不知何故返回文本。另一个原因当然可能是EnumWindows无法正常工作,并且exe所查找窗口的窗口句柄永远不会发送到EnumWindowsProc。

+0

德尔福7在Vista上运行(当然有管理员priviliges)。你确定Delphi 6没有运行吗? –

+2

德尔福6在Vista上运行,并没有管理员权限 –

+0

如果你在%PROGRAMFILES%以外的地方安装它,Delphi 6在Vista上运行良好(甚至没有管理员权限)。 –

回答

4

假设窗口标题从XP到Vista没有变化,这里没有太多可以出错的地方。我猜测这个问题是由于UIPI造成的。这是Vista的安全增强功能的一部分,这意味着进程只能将消息发送到具有相同或更低完整性级别的其他进程。这个其他进程是否升级?

除此之外,你最好的选择是在调试器下运行它。 Delphi 6肯定会在Vista上运行。它是在UAC之前编写的,因此无法写入其安装目录,因此无法顺利完成。因此,将它安装到您的用户配置文件或C:\ Delphi6中的某个地方 - 基本上任何标准用户都有写权限的地方。

最后,不要陷入运行Delphi提升的陷阱。这会混淆UIPI问题,如果这确实是个问题。

祝你好运!

+1

+1。这也是我的第一个想法。 –