Ich arbeite gerade mit WatiN, und finde es ein großartiges Werkzeug zur Automatisierung der Internetsuche. Ab der letzten Version scheint die Bildschirmaufnahmefunktion jedoch zu fehlen. Ich habe eine praktikable Lösung für die Aufnahme von Screenshots vom Bildschirm (unabhängig von der Generierung von Code ähnlich this StackOverflow question) neben einigen code by Charles Petzold. Leider gibt es eine fehlende Komponente: Wo ist das eigentliche Fenster?Wie finde ich die Position/Position eines Fensters mit einer hWnd ohne NativeMethods?
WatiN bietet bequem die hWnd
Sie den Browser, so können wir (mit diesem vereinfachten Beispiel) gesetzt bekommen ein Bild aus dem Bildschirm zu kopieren, etwa so:
// 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);
}
Erfolg! Wir erhalten Screenshots, aber es gibt dieses Problem: hWndX
und hWndY
zeigen immer auf die obere linke Ecke des Bildschirms, nicht die Position des Fensters, aus dem wir kopieren möchten.
Ich sah dann in Control.FromHandle
, aber dies scheint nur mit Formularen arbeiten Sie erstellt; Diese Methode gibt einen Nullzeiger zurück, wenn Sie die hWnd
darin übergeben.
Dann führte mich eine weitere Lektüre dazu, meine Suchkriterien zu wechseln ... Ich hatte nach 'Standort des Fensters' gesucht, als die meisten Leute wirklich die 'Position' des Fensters wollen. Dies führte zu another SO question, die darüber sprachen, aber ihre Antwort war, native Methoden zu verwenden.
Also, Gibt es eine native C# Möglichkeit, die Position eines Fensters zu finden, nur mit der hWnd (vorzugsweise mit nur .NET 2.0 Ära Bibliotheken)?
Dank! Sieht so aus, als würde es das tun. –
Hallo Robert, Konnten Sie Ihre komplette Lösung bekannt geben? Ich würde gerne screencapture-Funktionalität für Firefox und andere Browser (Chrome) hinzufügen. Vielen Dank im Voraus! Jeroen (Blei Entwickler WatiN) –
hey! Sicher, kann tun. –