繁体   English   中英

"如何在不传递句柄参数的情况下使用 Delphi 在 dll 项目中获取主机应用程序句柄"

[英]How can I get host application handle in dll project with Delphi without passing handle parameter

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

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

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

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

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

    "

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM