如何动态更改 iexplore 背景颜色

Posted

技术标签:

【中文标题】如何动态更改 iexplore 背景颜色【英文标题】:how to change iexplore background color dynamically 【发布时间】:2016-12-14 09:45:43 【问题描述】:

我正在从我的 Win32 应用程序作为一个单独的进程启动 Internet Explorer。稍后,我想从我的应用程序中动态更改 Internet Explorer 的背景颜色。我可以得到IEXPLORE.EXEHWND

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 背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何动态更改 TextView 背景颜色?

如何在 onPressed() 中动态更改凸起按钮的背景颜色

如何在 Kivy 中动态更改标签背景颜色

如何更改动态生成按钮的背景颜色?

在 ionic 3 中动态更改背景颜色

使用jquery动态更改背景颜色后,背景颜色的CSS悬停选择器不起作用