Vista上的Delphi 6 Exe:GetWindowText存在问题

Vista上的Delphi 6 Exe:GetWindowText存在问题,delphi,windows-vista,Delphi,Windows Vista,我在Windows XP下使用Delphi 6编译了一个exe文件,该文件使用EnumWindows和GetWindowText的组合来查找具有特定标题的窗口(不属于exe本身) 在Windows XP下,该行为与预期一样。然而,在Vista电脑上,它似乎不起作用 由于上面提到的Delphi版本没有在Vista上运行,我无法直接更改和测试它 但是,我将尝试在XP计算机上创建一个修改后的exe,输出一些附加数据,并将其复制到Vista计算机 我只想问一下,是否有人知道在Vista上运行Delphi

我在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。

假设从XP到Vista的窗口标题没有任何更改,这里不会有太多问题。我冒昧地猜测这个问题是由UIPI造成的。这是Vista安全增强的一部分,它意味着进程只能向具有相同或更低完整性级别的其他进程发送消息。另一个进程正在运行吗

除此之外,最好的办法是在调试器下运行它。Delphi6肯定在Vista上运行。它是在UAC之前编写的,因此没有写入其安装目录的权限,因此无法正常运行。因此,请将其安装到用户配置文件中的某个位置或C:\Delphi6–基本上是标准用户具有写访问权限的任何位置

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


祝你好运

假设从XP到Vista的窗口标题没有变化,这里不会有太多问题。我冒昧地猜测这个问题是由UIPI造成的。这是Vista安全增强的一部分,它意味着进程只能向具有相同或更低完整性级别的其他进程发送消息。另一个进程正在运行吗

除此之外,最好的办法是在调试器下运行它。Delphi6肯定在Vista上运行。它是在UAC之前编写的,因此没有写入其安装目录的权限,因此无法正常运行。因此,请将其安装到用户配置文件中的某个位置或C:\Delphi6–基本上是标准用户具有写访问权限的任何位置

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


祝你好运

Delphi7在Vista上运行(当然有管理员权限)。您确定Delphi 6没有运行吗?Delphi 6在Vista上运行,并且没有管理员权限。您给出的不调查此问题的原因是您的Delphi版本没有在您的Windows版本上运行。由于这个原因是假的,请在Windows上安装Delphi并正确调查问题,然后在此处更新您的问题,以反映实际情况。如果API函数失败,请告诉我们错误代码。如果成功,请告诉我们您期望的输出以及您得到的结果。不要“假定”没有找到手柄;使用调试器并知道会发生什么。不记得它是否相关,但Raymond的书和网站包含这篇文章:。实际上,您应该使用GetWindowText,正如Raymond解释的那样。Delphi 7在Vista上运行(当然具有管理员权限)。您确定Delphi 6没有运行吗?Delphi 6在Vista上运行,并且没有管理员权限。您给出的不调查此问题的原因是您的Delphi版本没有在您的Windows版本上运行。由于这个原因是假的,请在Windows上安装Delphi并正确调查问题,然后在此处更新您的问题,以反映实际情况。如果API函数失败,请告诉我们错误代码。如果成功,请告诉我们您期望的输出以及您得到的结果。不要“假定”没有找到手柄;使用调试器并知道会发生什么。不记得它是否相关,但Raymond的书和网站包含这篇文章:。实际上,正如Raymond所解释的,您应该使用GetWindowText