私は現在、WatiNと協力しており、素晴らしいWebブラウジングオートメーションツールであると考えています。しかし、最後のリリースでは、画面キャプチャ機能が不足しているようです。私はcode by Charles Petzoldに加えて、画面からスクリーンショットをキャプチャするための実行可能なソリューションを用意しました(独立してthis StackOverflow questionに似たコードを生成しています)。残念ながら、コンポーネントがありません:実際のウィンドウはどこですか?NativeMethodsのないhWndを指定したウィンドウの位置/場所を見つけるにはどうすればよいですか?
// browser is either an WatiN.Core.IE or a WatiN.Core.FireFox...
IntPtr hWnd = browser.hWnd;
string filename = "my_file.bmp";
using (Graphics browser = Graphics.FromHwnd(browser.hWnd))
using (Bitmap screenshot = new Bitmap((int)browser.VisibleClipBounds.Width,
(int)browser.VisibleClipBounds.Height,
browser))
using (Graphics screenGraphics = Graphics.FromImage(screenshot))
{
int hWndX = 0; // Upper left of graphics? Nope,
int hWndY = 0; // this is upper left of the entire desktop!
screenGraphics.CopyFromScreen(hWndX, hWndY, 0, 0,
new Size((int)browser.VisibileClipBounds.Width,
(int)browser.VisibileClipBounds.Height));
screenshot.Save(filename, ImageFormat.Bmp);
}
成功:
WatiNは、便利なブラウザのあなたにhWnd
ので、私たちは(この単純な例で)そうのように、画面から画像をコピーするように設定することができますを提供しています!スクリーンショットを取得しますが、その問題があります:hWndX
とhWndY
は、コピー元のウィンドウの位置ではなく、画面の左上の最上部のコーナーを常に指しています。
私はControl.FromHandle
を調べましたが、作成したフォームでのみ動作するようです。このメソッドは、hWnd
を渡すとnullポインタを返します。
さらに、私の検索条件を切り替えるために私を導きます...私は、ほとんどの人が実際にウィンドウの「位置」を求めているときに、「ウィンドウの位置」を探していました。これはこれについて話したanother SO questionにつながりましたが、その答えはネイティブメソッドを使用することでした。
したがって、hWnd(好ましくは.NET 2.0時代のライブラリのみ)を指定したネイティブのC#のウィンドウの位置はありますか?
ありがとう!それがそうするように見えます。 –
こんにちはRobert、 あなたは完全なソリューションを投稿できますか? firefoxや他のブラウザ(chrome)にscreencapture機能を追加したいと思います。 ありがとうございます! イエロー(リードdevi WatiN) –
ちょっと!確かに、行うことができます。 –