В настоящее время я работаю с WatiN и считаю, что это отличный инструмент для автоматического просмотра веб-страниц. Однако, как и в последнем выпуске, функции захвата экрана, похоже, отсутствуют. Я придумал подходящее решение для захвата скриншотов с экрана (независимо от генерации кода, подобного qaru.site/info/390030/...) в дополнение к некоторым код Чарльза Петцольда. К сожалению, отсутствует недостающий компонент: Где находится фактическое окно?
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
, но, похоже, это работает только с созданными вами формами; этот метод возвращает нулевой указатель, если вы передаете hWnd
в него.
Затем, дальнейшее чтение приведет меня к переключению критериев поиска... Я искал "местоположение окна", когда большинство людей действительно хотят "положение" окна. Это привело к другому вопросу SO, в котором говорилось об этом, но их ответ заключался в использовании собственных методов.
Итак, Есть ли собственный С# способ нахождения положения окна, только с учетом hWnd (желательно только с библиотеками эпох .NET 2.0)?