2016-12-14 86 views
0

我從我的Win32應用程序啓動Internet Explorer作爲一個單獨的過程。之後,我想從我的應用程序中動態更改此Internet Explore的背景顏色。我可以得到HWNDIEXPLORE.EXE的:如何動態更改iexplore背景色

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); 
} 
+0

在任何情況下,這都不太可能奏效,您想要做什麼/爲什麼?改變鉻的顏色? - 在最近的版本中沒有太多,改變顯示的網頁的顏色? - 後者可能與COM或MAA –

+0

這聽起來完全不合理。有些機器可能沒有IE。 IE的實施方式,流程和窗口層次可能會有很大的變化。希望你能夠破解類似的背景畫筆,表明對Win32的工作原理缺乏讚賞。當你調整你的期望變得更現實時,你只會真正得到滿足。 –

回答

0

首先,IE是不能保證在前臺當你需要它。您應該枚舉正在啓動的特定進程的開放HWND句柄。看看EnumThreadWindows()EnumChildWindows()

其次,一旦你有適當的HWND到一個IE窗口,可以get its IHTMLDocument2 interface,然後用IE瀏覽器的DOM接口根據需要操縱瀏覽器的內容。如通過設置IHTMLDocument2::bgColor屬性。或者使用IHTMLDocument2::body屬性檢索<body>元素的IHTMLBodyElement接口,然後設置IHTMLBodyElement::bgColor屬性。