【问题标题】:Delphi 6 Exe on Vista: Problems with GetWindowTextVista上的Delphi 6 Exe:GetWindowText的问题
【发布时间】: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


【解决方案1】:

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

除此之外,最好的办法是在调试器下运行它。 Delphi 6 确实可以在 Vista 上运行。它是在 UAC 之前编写的,因此在无权写入其安装目录的情况下并不顺利。因此,请将其安装到您的用户配置文件或 C:\Delphi6 中的某个位置——基本上是标准用户具有写入权限的任何位置。

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

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多