Я делаю приложение для захвата экрана, и все идет хорошо. Все, что мне нужно сделать, это захватить активное окно и сделать скриншот этого активного окна. Кто-нибудь знает, как я могу это сделать?
c#
screenshot
active-window
пользователь
источник
источник
Ответы:
http://www.developerfusion.com/code/4630/capture-a-screen-shot/
источник
для захвата текущего использования окна
источник
Я предлагаю следующее решение для захвата любого текущего активного окна (не только нашего приложения C #) или всего экрана с определением положения курсора относительно левого верхнего угла окна или экрана соответственно:
источник
Rect
на СистемныйRectangle
, но после этого функцияGetWindowRect
вернула неправильный прямоугольник. ВместоRight
иTop
, он устанавливаетWidth
иHeight
выходной прямоугольник.var thisWindowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
вместо этогоВот фрагмент для захвата рабочего стола или активного окна. Он не имеет отношения к Windows Forms.
Как захватить весь экран:
Как захватить активное окно:
Первоначально найден здесь: http://www.snippetsource.net/Snippet/158/capture-screenshot-in-c
источник
Код KvanTTT работал отлично. Я немного расширил его, чтобы дать немного больше гибкости при сохранении формата, а также возможность сохранения с помощью hWnd, .NET Control / Form. Вы можете получить растровое изображение или сохранить в файл с несколькими опциями.
источник
Я полагаю, вы используете,
Graphics.CopyFromScreen
чтобы получить скриншот.Вы можете использовать P / Invoke для GetForegroundWindow ( а затем получить его положение и размер ), чтобы определить, из какого региона вам нужно копировать.
источник
Вы можете использовать код из этого вопроса: Как я могу сохранить скриншот непосредственно в файл в Windows?
Просто перейдите
WIN32_API.GetDesktopWindow()
к свойству Handle окна, которое вы хотите захватить.источник
Небольшая настройка метода static void ImageSave () предоставит вам возможность сохранить его. Кредит идет в Microsoft (http://msdn.microsoft.com/en-us/library/sfezx97z.aspx)
Ваше событие button_click должно быть закодировано примерно так ...
источник
Если вы хотите использовать управляемый код: это захватит любое окно через ProcessId.
Я использовал следующее, чтобы сделать окно активным.
Я использовал экран печати, чтобы захватить окно.
источник
Используйте следующий код:
источник
Основано на ответе ArsenMkrt, но этот позволяет вам захватить элемент управления в вашей форме (например, я пишу инструмент, в котором есть элемент управления WebBrowser, и я хочу захватить только его отображение). Обратите внимание на использование метода PointToScreen:
Имея объект Bitmap, вы можете просто вызвать Save на нем
Выше предполагается, что GC будет захватывать растровое изображение, но, возможно, лучше присвоить результат someControl.getScreenshot () переменной Bitmap, а затем утилизировать эту переменную вручную, когда закончите с каждым изображением, особенно если вы делаете этот захват часто ( скажем, у вас есть список веб-страниц, которые вы хотите загрузить и сохранить их скриншоты):
Более того, можно использовать предложение using, которое имеет дополнительное преимущество освобождения ресурсов растрового изображения даже в случае возникновения исключения внутри блока using (child):
Обновить:
Теперь инструмент WebCapture развернут ClickOnce ( http://gallery.clipflair.net/WebCapture ) из Интернета (также имеет хорошую поддержку автообновления благодаря ClickOnce), и его исходный код можно найти по адресу https://github.com/Zoomicon. / ClipFlair / дерево / мастер / Server / Инструменты / WebCapture
источник