我正在尝试使用 TWebBrowser 在 Delphi 服务器应用程序 (XE2) 中创建网页的屏幕截图。屏幕截图是通过对我的服务器的 Web 服务调用启动的,因此为了保持可伸缩性,我希望在不依赖关键部分或 Application.ProcessMessages 来进行网页渲染的情况下为请求提供服务。
这可以用 TWebBrowser 完成吗?
我正在尝试使用 TWebBrowser 在 Delphi 服务器应用程序 (XE2) 中创建网页的屏幕截图。屏幕截图是通过对我的服务器的 Web 服务调用启动的,因此为了保持可伸缩性,我希望在不依赖关键部分或 Application.ProcessMessages 来进行网页渲染的情况下为请求提供服务。
这可以用 TWebBrowser 完成吗?
我已经在许多对象中做到了这一点,遗憾的是,TWebBrowser 对象与它的父对象非常相关,特别是它的 HWND 句柄。(另见 TWebBrowser.HandleNeeded)
我得到的最好结果是将 TWebBrowser 和表单封装在 ActiveX 库中,因此它背后的“消息泵”与主应用程序分开。ActiveX/COM 以这种方式处理所有线程和同步问题。
尝试将 TWebbrowser 放在单独的 exe 中。这会将其转移到不同的线程/进程,您将获得模块化、可伸缩性和性能。Web 服务可以使用 IPC 或消息传递与具有 Web 浏览器的进程进行通信。
使用队列系统来跟踪屏幕捕获进程的捕获任务分配和完成情况,或者为每个要捕获的站点运行 exe。
使用此方法获得的另一个好处是,如果捕获程序崩溃,Web 服务仍可用于接收请求。Web 服务可以在分配任务之前检查 exe 进程是否在内存中,如果没有(崩溃或未启动),它可以自行启动 exe。