【发布时间】:2011-12-02 13:47:27
【问题描述】:
我有一个在 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。
【问题讨论】:
-
Delphi 7 在 Vista 上运行(当然有管理员权限)。你确定 Delphi 6 没有运行?
-
Delphi 6 在 Vista 上运行,无需管理员权限
-
你给出的不调查这个问题的原因是你的 Delphi 版本不能在你的 Windows 版本上运行。由于这个原因是虚假的,请在 Windows 上安装 Delphi 并正确调查问题,然后在此处更新您的问题,以便它反映实际发生的情况。如果 API 函数失败,请告诉我们错误代码。如果成功,请告诉我们您期望的输出以及您得到的结果。不要“假设”找不到句柄;使用调试器并知道会发生什么。
-
不记得是否相关,但雷蒙德的书和网站包含这篇文章:blogs.msdn.com/b/oldnewthing/archive/2003/08/21/54675.aspx。
-
实际上你应该像 Raymond 解释的那样使用 GetWindowText
标签: delphi windows-vista