2011-12-16 12 views
1

PrintWindow関数で特定のウィンドウをキャプチャするコードがあります。具体的には、ブラウザでWebページを取得します。このコードはスタンドアロンのWindowsアプリケーションでテストされていますが、問題なく動作します。同じコードがNPAPIプラグインに組み込まれ、Google Chromeに読み込まれます。問題が発生します。 Chromeにタブが1つしかない場合、コードは正常に機能します。 Chromeに2つのタブがある場合、コードは予想されるサイズのブラックボックスを返します。同じウィンドウハンドル(Chrome_RenderWidgetHostHWND)で、スタンドアロンアプリケーションとプラグインを同時にテストしました。アプリケーションは常に動作しますが、複数のタブがブラウザで開いている場合、プラグインは常に失敗します。PrintWindowはスタンドアロンアプリケーションで動作し、NPAPIプラグインで部分的に動作します

私が本当に感謝します、誰かがこれを修正する手掛かりを与える場合。

ありがとうございます。

NB。ウインドウをキャプチャする他の方法は、私のユースケースのさらに大きな欠点のために適用できません。

答えて

0

私はあなたがサンドボックスの問題にぶつかっていると思います。

あなたのアプリは「通常の」完全性レベルで動作している可能性が高いため、WM_PRINTまたはWM_PRINTCLIENTメッセージをChromeプロセスに送信することは問題ありません。

あなたがChromeのプラグインを使用しているとき、あなたのコードは「低い」整合性プロセスとして実行されると信じています(これは、粉砕攻撃の可能性を減らします)。したがって、別のプロセスでウィンドウにメッセージを送信できないということは私には驚きではありません。

クロムにタブが1つしかない場合は、残念ながらその理由が説明されていません。複数のタブが開いている場合、アプリとプラグインの両方でChrome_RenderWidgetHostHWNDという同じインスタンスが見つかりましたか?一般に、タブごとにこれらのウィンドウの1つがあります。どうやって窓を見つけるのですか?

+0

Chromeが低レベルのモードでプラグインを起動しているかどうかを確認することはこれまで可能ではありませんでした。私は周囲に浮かんでいるたくさんの噂を見てきましたが、それが明記されている具体的な場所を見つけることができず、クローム・プラグインに問題があったわけでもありません。 – taxilian

+0

同じウィンドウでコードをテストします(すべてのChrome_RenderWidgetHostHWNDのハンドルが記録されますので、プラグインとアプリケーションでキャプチャします)。残念ながら、キャプチャされたタブと同じプロセスにプラグインがロードされることは保証できません。あなたが知っているように、Chromeは最初からすべてのタブで2つ以上のプロセスを作成しますが、プラグインは1度だけ読み込まれます(ページには挿入されず、独自の背景ページにあります)。しかし、スタンドアロンアプリも別のプロセスであり、動作することに注意してください。だからまだ私の謎です。 – Stan

+1

@タクシリアン:このドキュメントでは、Chromeで使用されるサンドボックスモデルの低完全性ビットの使用について説明します。http://dev.chromium.org/developers/design-documents/sandbox –

関連する問題