繁体   English   中英

如何获取 firefox 浏览器 window 的句柄,以便我可以操作 window

[英]How to get a handle on the firefox browser window so I can manipulate the window

I need to be able to start Firefox from my app and then get a handle to the Firefox browser window in order to move it, resize it, etc. In the app, Firefox is started using CreateProcessAsUser() .

问题是,Firefox 默认使用启动器进程

在 Firefox 的 Windows 版本中,启动器进程是用户运行 Firefox 时启动的初始进程。 其唯一目的是在暂停的 state 中创建浏览器进程,配置浏览器进程,恢复浏览器进程,然后将 GUI 前台移交给浏览器。 一旦启动器进程完成了这个目标,它就会退出。

因为 Firefox 使用启动器进程启动浏览器 window,所以CreateProcessAsUser()返回的 PID 不是浏览器 window 的 PID。 所以我不能使用EnumWindows()并匹配 PID。 I know that the Window class type for the browser window is MozillaWindowClass , but it's possible there will be multiple windows of this type in my context.

如何在浏览器 window 上获取句柄以便以编程方式对其进行操作?

Firefox 不提供 API 以获得您想要的。

您从CreateProcessAsUser()获得了启动器的 PID。 在您关闭CreateProcessAsUser()返回的HANDLE之前,该 PID 将保持有效并且不会被回收。 这意味着,您可以枚举正在运行的进程,直到找到其父 PID 为启动器 PID 1的进程。 然后,您可以枚举 windows 寻找属于该子 PID 的一个。

1 :或者,当您创建启动器进程时,将其分配给作业 Object ,然后您可以监视JOB_OBJECT_MSG_NEW_PROCESS消息,指示新的子进程已添加到作业中。 然后您将获得新进程的 PID。

暂无
暂无

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

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