我有一个dll项目。我必须获取主机应用程序句柄。我无法将句柄从主机应用程序传递到dll项目,因为主机应用程序不是我的。
主机应用程序在第二个监视器上运行,但是当主机应用程序调用我的窗体(dll)时,第一个监视器中显示的窗体。我必须检测主机应用程序的屏幕坐标,或者必须对主机应用程序在第一台监视器或第二台监视器上运行的技术进行检测。
您正在寻找过程中的顶级窗口。像这样找到它们:
GetCurrentProcessId
获取您的进程ID。EnumWindows
以枚举所有顶级窗口。GetWindowThreadProcessId
以获取拥有该窗口的进程ID。与步骤1中找到的进程ID匹配的任何项都来自您的进程。您面临的问题是,第3步可能会识别多个此类窗口。您可以调用GetWindow
passGW_OWNER
来获取窗口的所有者,并使用它来修剪候选字段。您认为是主窗口的内容可能没有所有者,但其他顶层窗口可能是所有者。即使这样,也不能保证将范围缩小到单个候选者,并且您很可能需要提出一些其他逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句