Obecnie pracuję z WatiN i uważam, że jest to świetne narzędzie do automatyzacji przeglądania stron internetowych. Jednak od wydania ostatniego wydaje się, że brakuje funkcji przechwytywania ekranu. Udało mi się stworzyć praktyczne rozwiązanie do przechwytywania zrzutów ekranu z ekranu (niezależnie generującego kod podobny do this StackOverflow question) oraz niektórych code by Charles Petzold. Niestety brakuje elementu: Gdzie jest rzeczywiste okno?Jak znaleźć położenie/położenie okna z hWnd bez NativeMethods?
Watin dogodnie dostarcza przeglądarki hWnd
do ciebie, więc możemy (z tego uproszczonego przykładu) Przygotuj się do kopiowania obrazu na ekranie, tak jak poniżej:
// 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);
}
Sukces! Dostajemy zrzuty ekranu, ale jest taki problem: hWndX
i hWndY
zawsze wskazują na lewy górny róg ekranu, a nie lokalizację okna, z którego chcemy skopiować.
Następnie przejrzałem Control.FromHandle
, ale wydaje się, że działa tylko z utworzonymi formularzami; ta metoda zwraca wskaźnik zerowy, jeśli przekazujesz do niego wartość hWnd
.
Następnie dalsze czytanie doprowadziło mnie do zmiany kryteriów wyszukiwania ... Szukałem "lokalizacji okna", kiedy większość ludzi naprawdę chce "pozycji" okna. To prowadziło do another SO question, która mówiła o tym, ale ich odpowiedzią było użycie natywnych metod.
Tak, Czy istnieje macierzysty sposób C# znalezienia pozycji okna, tylko pod warunkiem hWnd (najlepiej tylko z bibliotekami ery .NET 2.0)?
Dzięki! Wygląda na to, że to zrobi. –
Witaj Robert, Czy możesz zamieścić pełne rozwiązanie? Chciałbym dodać funkcjonalność screencapture dla firefox i innych przeglądarek (chrome). Z góry dziękuję! Jeroen (lead dev WatiN) –
hej! Pewnie, może zrobić. –