Tworzę aplikację do przechwytywania ekranu i wszystko idzie dobrze. Wszystko, co muszę zrobić, to przechwycić aktywne okno i zrobić zrzut ekranu tego aktywnego okna. Czy ktoś wie, jak mogę to zrobić?
c#
screenshot
active-window
użytkownik
źródło
źródło
Odpowiedzi:
http://www.developerfusion.com/code/4630/capture-a-screen-shot/
źródło
do przechwytywania bieżącego wykorzystania okna
źródło
Proponuję następne rozwiązanie do przechwytywania dowolnego bieżącego aktywnego okna (nie tylko naszej aplikacji C #) lub całego ekranu z określeniem pozycji kursora odpowiednio względem lewego górnego rogu okna lub ekranu:
źródło
Rect
SystemRectangle
, ale po tym funkcjaGetWindowRect
zwróciła nieprawidłowy prostokąt. ZamiastRight
iTop
, ustawiaWidth
iHeight
wyjściowy prostokąt.var thisWindowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
Oto fragment umożliwiający przechwycenie pulpitu lub aktywnego okna. Nie ma odniesienia do Windows Forms.
Jak zrobić zrzut całego ekranu:
Jak przechwycić aktywne okno:
Pierwotnie znaleziony tutaj: http://www.snippetsource.net/Snippet/158/capture-screenshot-in-c
źródło
Kod KvanTTT działał świetnie. Rozszerzyłem go nieco, aby umożliwić trochę większą elastyczność w zapisywaniu formatu, a także możliwość zapisywania przez hWnd, .NET Control / Form. Możesz pobrać mapę bitową lub zapisać do pliku za pomocą kilku opcji.
źródło
Zakładam, że używasz
Graphics.CopyFromScreen
do zrobienia zrzutu ekranu.Możesz użyć P / Invoke, aby GetForegroundWindow ( a następnie uzyskać jego położenie i rozmiar ), aby określić, z którego regionu chcesz kopiować.
źródło
Możesz użyć kodu z tego pytania: Jak mogę zapisać zrzut ekranu bezpośrednio do pliku w systemie Windows?
Po prostu zmień
WIN32_API.GetDesktopWindow()
właściwość Handle okna, które chcesz przechwycić.źródło
Niewielka zmiana w metodzie static void ImageSave () da ci opcję zapisania go. Kredyt trafia do firmy Microsoft (http://msdn.microsoft.com/en-us/library/sfezx97z.aspx)
Twoje zdarzenie button_click powinno mieć kod podobny do tego ...
źródło
Jeśli chcesz użyć kodu zarządzanego: spowoduje to przechwycenie dowolnego okna za pośrednictwem ProcessId.
Użyłem następujących poleceń, aby aktywować okno.
Użyłem ekranu drukowania, aby przechwycić okno.
źródło
Użyj poniższego kodu:
źródło
Na podstawie odpowiedzi ArsenMkrt, ale ta umożliwia przechwycenie kontrolki w formularzu (piszę na przykład narzędzie, które ma w sobie kontrolkę WebBrowser i chce przechwycić tylko jej wyświetlanie). Zwróć uwagę na użycie metody PointToScreen:
Mając obiekt Bitmap, możesz po prostu wywołać na nim Save
Powyższe zakłada, że GC pobierze bitmapę, ale może lepiej jest przypisać wynik someControl.getScreenshot () do zmiennej Bitmap, a następnie usunąć tę zmienną ręcznie po zakończeniu z każdym obrazem, zwłaszcza jeśli robisz to często przechwytywanie ( powiedz, że masz listę stron internetowych, które chcesz załadować i zapisać ich zrzuty ekranu):
Jeszcze lepiej, można by zastosować klauzulę using, która ma dodatkową zaletę zwalniania zasobów bitmapy nawet w przypadku wystąpienia wyjątku wewnątrz bloku using (potomnego):
Aktualizacja:
Teraz narzędzie WebCapture jest wdrażane za pomocą technologii ClickOnce ( http://gallery.clipflair.net/WebCapture ) z Internetu (ma również dobrą obsługę automatycznej aktualizacji dzięki ClickOnce), a jego kod źródłowy można znaleźć na https://github.com/Zoomicon / ClipFlair / tree / master / Server / Tools / WebCapture
źródło