gpt4 book ai didi

delphi - 如何使用Delphi在dll项目中获取主机应用程序句柄而不传递句柄参数

转载 作者:行者123 更新时间:2023-12-02 09:30:10 26 4
gpt4 key购买 nike

我有一个 dll 项目。我必须获得主机应用程序句柄。我无法将句柄从主机应用程序传递到 dll 项目,因为主机应用程序不是我的。

主机应用程序在第二个监视器上运行,但是当主机应用程序调用我的表单(dll)时,表单将显示在第一个监视器中。我必须检测主机应用程序屏幕坐标,或者必须取消在第一台显示器或第二台显示器上运行的主机应用程序。

最佳答案

您正在寻找流程中的顶级窗口。像这样找到它们:

  1. 调用 GetCurrentProcessId 获取您的进程 ID。
  2. 调用 EnumWindows 枚举所有顶级窗口。
  3. 在枚举回调中,对于每个顶级窗口,调用GetWindowThreadProcessId来获取拥有该窗口的进程ID。任何与步骤 1 中找到的进程 ID 相匹配的进程都来自您的进程。

您面临的问题是步骤 3 可能会识别多个此类窗口。您可以调用 GetWindow 传递 GW_OWNER 来获取窗口的所有者,并使用它来修剪候选字段。您认为是主窗口的窗口可能没有所有者,但其他顶层窗口很可能是有所有者的。即使这样也不能保证将字段缩减为单个候选者,并且您很可能需要提出一些额外的逻辑。

关于delphi - 如何使用Delphi在dll项目中获取主机应用程序句柄而不传递句柄参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com