Saya membuat aplikasi menangkap layar dan semuanya berjalan dengan baik. Yang perlu saya lakukan adalah menangkap jendela aktif dan mengambil screenshot dari jendela aktif ini. Adakah yang tahu bagaimana saya bisa melakukan ini?
c#
screenshot
active-window
pengguna
sumber
sumber
Jawaban:
http://www.developerfusion.com/code/4630/capture-a-screen-shot/
sumber
untuk menangkap penggunaan jendela saat ini
sumber
Saya menyarankan solusi berikutnya untuk menangkap setiap jendela aktif saat ini (tidak hanya aplikasi C # kami) atau seluruh layar dengan penentuan posisi kursor relatif terhadap sudut kiri-atas jendela atau layar masing-masing:
sumber
Rect
dengan SystemRectangle
, tetapi setelah itu fungsiGetWindowRect
mengembalikan persegi panjang yang salah. Alih-alihRight
danTop
, itu mengaturWidth
danHeight
persegi panjang keluaran.var thisWindowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
sebaliknyaBerikut ini cuplikan untuk menangkap desktop atau jendela aktif. Ini tidak memiliki referensi ke Formulir Windows.
Cara menangkap seluruh layar:
Cara menangkap jendela aktif:
Awalnya ditemukan di sini: http://www.snippetsource.net/Snippet/158/capture-screenshot-in-c
sumber
Kode KvanTTT bekerja sangat baik. Saya sedikit memperluas untuk memungkinkan sedikit lebih banyak fleksibilitas pada format simpan, serta kemampuan untuk menyimpan dengan hWnd, .NET Control / Form. Anda bisa mendapatkan bitmap atau menyimpan ke file, dengan beberapa opsi.
sumber
Saya anggap Anda gunakan
Graphics.CopyFromScreen
untuk mendapatkan tangkapan layar.Anda dapat menggunakan P / Invoke ke GetForegroundWindow ( dan kemudian mendapatkan posisi dan ukurannya ) untuk menentukan wilayah tempat Anda perlu menyalin.
sumber
Anda dapat menggunakan kode dari pertanyaan ini: Bagaimana saya bisa menyimpan tangkapan layar langsung ke file di Windows?
Ubah saja
WIN32_API.GetDesktopWindow()
ke properti Handle dari jendela yang ingin Anda tangkap.sumber
Tweak kecil untuk metode statis ImageSave () akan memberi Anda pilihan tempat untuk menyimpannya. Kredit jatuh ke Microsoft (http://msdn.microsoft.com/en-us/library/sfezx97z.aspx)
Tombol_klik acara Anda harus diberi kode sesuatu seperti ini ...
sumber
Jika Anda ingin menggunakan kode terkelola: Ini akan menangkap jendela apa saja melalui ProcessId.
Saya menggunakan yang berikut ini untuk mengaktifkan jendela.
Saya menggunakan layar cetak untuk menangkap jendela.
sumber
Gunakan kode berikut:
sumber
Berdasarkan jawaban ArsenMkrt, tetapi yang ini memungkinkan Anda untuk menangkap kontrol dalam formulir Anda (saya sedang menulis alat misalnya yang memiliki kontrol WebBrowser di dalamnya dan ingin menangkap hanya layarnya). Perhatikan penggunaan metode PointToScreen:
Memiliki objek Bitmap, Anda dapat memanggil Simpan di atasnya
Di atas mengasumsikan GC akan mengambil bitmap, tapi mungkin lebih baik untuk menetapkan hasil someControl.getScreenshot () ke variabel Bitmap, lalu buang variabel itu secara manual saat selesai dengan setiap gambar, terutama jika Anda sering melakukan grabbing ini ( katakanlah Anda memiliki daftar halaman web yang ingin Anda muat dan simpan tangkapan layarnya):
Lebih baik lagi, dapat menggunakan klausa penggunaan, yang memiliki manfaat tambahan yaitu melepaskan sumber daya bitmap bahkan dalam kasus pengecualian yang terjadi di dalam blok use (child):
Memperbarui:
Sekarang alat WebCapture adalah ClickOnce-deployed ( http://gallery.clipflair.net/WebCapture ) dari web (juga memiliki dukungan pembaruan otomatis berkat ClickOnce) dan Anda dapat menemukan kode sumbernya di https://github.com/Zoomicon / ClipFlair / tree / master / Server / Tools / WebCapture
sumber