私は現在、WatiN を使用していますが、これが優れた Web ブラウジング自動化ツールであることがわかりました。ただし、前回のリリースの時点では、スクリーン キャプチャ機能が不足しているようです。Charles Petzold によるいくつかのコードに加えて、画面からスクリーンショットをキャプチャするための実行可能なソリューション (この StackOverflow questionに似たコードを個別に生成する) を思いつきました。残念ながら、欠落しているコンポーネントがあります:実際のウィンドウはどこにありますか?
WatiN は便利にブラウザーを提供する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);
}
成功!スクリーンショットを取得しますが、問題があります。コピー元のウィンドウの場所ではなくhWndX
、hWndY
常に画面の左上隅をポイントします。
次に を調べましたがControl.FromHandle
、これは作成したフォームでのみ機能するようです。このメソッドに を渡すと、このメソッドは null ポインターを返しますhWnd
。
次に、さらに読んで、検索条件を変更することにしました...ほとんどの人がウィンドウの「位置」を本当に必要としているときに、「ウィンドウの場所」を検索していました。これは、これについて話している別のSOの質問につながりましたが、彼らの答えはネイティブメソッドを使用することでした.
では、ウィンドウの位置を見つけるためのネイティブ C# の方法はありますか?