如何动态更改 iexplore 背景颜色
Posted
技术标签:
【中文标题】如何动态更改 iexplore 背景颜色【英文标题】:how to change iexplore background color dynamically 【发布时间】:2016-12-14 09:45:43 【问题描述】:我正在从我的 Win32 应用程序作为一个单独的进程启动 Internet Explorer。稍后,我想从我的应用程序中动态更改 Internet Explorer 的背景颜色。我可以得到IEXPLORE.EXE
的HWND
:
HWND iexplor = GetForegroundWindow(); //assuming my explorer is active window currently
那么,现在有了这个HWND
实例,有没有办法可以改变IEXPLORE
的背景颜色?
常规 Win32 API 失败,因为它是一个单独的进程(访问被拒绝)。
对这个问题有什么想法/建议吗?
以下代码失败,因为 IE 是一个单独的进程:
HWND activeWindow = GetForegroundWindow();
if (activeWindow)
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 0));
SetClassLongPtr(activeWindow, GCLP_HBRBACKGROUND, (LONG)brush);
InvalidateRect(activeWindow, NULL, TRUE);
int redraw = ::UpdateWindow(activeWindow);
【问题讨论】:
这在任何情况下都不太可能运作良好,您具体想做什么/为什么?改变铬的颜色? - 在最近的版本中没有太多,改变显示网页的颜色? - 后者可以使用 COM 或 MAA 这听起来完全不明智。有些机器可能没有IE。 IE 的实现方式、进程和窗口的层次结构可能存在巨大差异。希望您可以像这样破解类背景画笔,这表明您对 Win32 的工作方式缺乏了解。只有当您将期望调整为更现实时,您才会真正获得满意。 【参考方案1】:首先,不能保证 IE 在您需要时处于前台。相反,您应该枚举您正在启动的特定进程的打开的HWND
句柄。看EnumThreadWindows()
、EnumChildWindows()
等。
其次,一旦你有一个正确的HWND
到一个IE窗口,你就可以get its IhtmlDocument2
interface,然后根据需要使用IE的DOM接口来操作浏览器的内容。例如通过设置IHTMLDocument2::bgColor 属性。或者使用IHTMLDocument2::body
属性检索IHTMLBodyElement
接口的<body>
元素,然后设置IHTMLBodyElement::bgColor 属性。
【讨论】:
以上是关于如何动态更改 iexplore 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章