2016-12-14 19 views
0

Win32アプリケーションからInternet Explorerを別のプロセスとして起動します。後で、このInternet Exploreの背景色を私のアプリケーションから動的に変更したいと思います。私はIEXPLORE.EXEHWNDを取得することができます: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

これは、どのようなシナリオでうまくいくとは考えにくいのですか。具体的にはどうしますか?クロム色を変える?最近のバージョンでは表示されているWebページの色を変更することはあまりありません。 - 後者はCOMまたはMAAで可能です –

+0

これは完全に不都合なアドバイスです。いくつかのマシンはIEを持っていないかもしれません。 IEが実装される方法、プロセスとウィンドウの階層構造に大きなばらつきが存在する可能性があります。そのようなクラスのバックグラウンドブラシをハックすることができたら、Win32の仕組みに感謝しません。より現実的になるようにあなたの期待を調整するとき、あなたはここで本当に満足するでしょう。 –

答えて

0

まず、IEはあなたがそれを必要とするとき、フォアグラウンドであることが保証されていません。代わりに、起動している特定のプロセスのオープンHWNDハンドルを列挙する必要があります。 、EnumThreadWindows()を見てEnumChildWindows()など

第二に、あなたはIEのウィンドウへHWND適切なを持っていたら、あなたはget its IHTMLDocument2 interfaceことができ、その後、必要に応じてブラウザのコンテンツを操作するためにIEのDOMインタフェースを使用しています。たとえば、IHTMLDocument2::bgColorプロパティを設定します。またはIHTMLDocument2::bodyプロパティを使用して<body>要素のIHTMLBodyElementインターフェイスを取得し、次にIHTMLBodyElement::bgColorプロパティを設定します。

関連する問題