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

萨亚特·埃特芬克

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

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

大卫·赫弗南(David Heffernan)

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在给定窗口句柄的情况下,如何确定窗口句柄是否是Windows UI而不是应用程序的一部分?

如何在不直接将参数传递给ln实用程序的情况下从应用程序内部创建硬链接(Linux)?

如何在不运行ipfs节点的情况下从Javascript应用程序使用IPFS?

如何在不泄漏句柄的情况下(跨平台)进行本地IPC?

如何在不刷新顶点的情况下获取项目中的值

如何在不使用 VCL 样式的情况下将颜色应用于 Delphi 10.2 Tokyo 应用程序?

如何在不阻止我的 Flutter 应用程序的情况下运行我的同步搜索功能?

如何在不传递用户名和传递url参数的情况下获取令牌?

如何在不使用Jquery UI的情况下动态移动HTML 5范围输入句柄

如何在不冻结应用程序的情况下从WPF DataGrid从ASP.NET WebAPI获取数据?

如何在不购买应用内计费项目的情况下使用我自己的生产 Android 应用

德尔福7。如何在不重新启动应用程序的情况下卸载dll?

如何在不包含Ionic.js的情况下使用Ionic Framework创建应用程序

如何在不刷新应用程序的情况下返回 PUT 请求的结果?

如何在不产生单独的JVM的情况下并行提交多个Spark应用程序?

如何在不导致应用程序崩溃的情况下更新TextView?

如何在不破坏页面的情况下向闪亮的应用程序添加框?

如何在不终止现有连接的情况下更新nodejs应用程序的部署

如何在不丢失会话的情况下更新ASP Net Webform或MVC应用程序?

如何在不卸载应用程序的情况下删除容器?

如何在不运行应用程序的情况下切换日食工作区?

如何在不冲突的情况下安装多个Microsoft应用程序

如何在不启动应用程序的情况下更新WINEPREFIX

如何在不冻结应用程序的情况下延迟代码

如何在不使用FLASK_WTF的情况下将值从form1的下拉列表传递到多个不同的表单/多个flask句柄

如何检测应用程序正在使用多少句柄

我可以在不丢失Android应用程序的情况下安全删除我的新Firebase项目吗?

如何在不使用控制台的情况下打开我的 React Web 应用程序?

如何在没有SceneDelegate的情况下使用SwiftUI 2更新我的应用程序代码