Pertanyaan screenshot aplikasi dengan python, terlepas dari apa yang ada di depannya


Jadi saya bisa menggunakan PIL untuk mengambil tangkapan layar dari desktop, dan kemudian menggunakan pywin32 untuk mendapatkan persegi panjangnya dan memotong bagian yang saya inginkan. Namun, jika ada sesuatu di depan jendela yang saya inginkan, itu akan menutup aplikasi yang saya inginkan. Apakah ada cara untuk mendapatkan jendela apa yang akan mengatakan aplikasi saat ini ditampilkan? Ia memiliki data di suatu tempat, bahkan ketika ada jendela lain di depannya.


4
2017-07-03 20:22


asal


Jawaban:


Saya telah melakukan hal yang sama dengan memberikan aplikasi yang saya inginkan fokus sebelum mengambil bidikan:

shell=win32com.client.Dispatch("Wscript.Shell")
success = shell.AppActivate(app_name) # Returns true if focus given successfully.

3
2017-07-03 21:13



Ada cara untuk melakukan ini, menggunakan PrintWindow fungsi. Ini menyebabkan jendela untuk menggambar ulang di permukaan lain.


2
2017-08-27 16:01



Saya memposting kode kerja dalam jawabannya di sini: Python Screenshot dari jendela tidak aktif. Ini menggunakan PrintWindow fungsi. Ini adalah cara yang "benar" untuk menyalin gambar dari jendela tersembunyi, tetapi itu tidak berarti bahwa itu akan selalu berhasil. Itu tergantung pada program yang mengimplementasikan pesan yang tepat, WM_Print tanggapan.

Jika Anda mencoba menggunakannya PrintWindow itu tidak berhasil, maka satu-satunya pilihan yang tersisa adalah membawa jendela ke depan sebelum mengambil BitBlit.


2
2018-06-22 17:33



Jika Anda bisa, cobalah menyimpan urutan jendela, lalu pindahkan aplikasi Anda ke depan, tangkapan layar, dan pindahkan kembali dengan sangat cepat. Mungkin menghasilkan sedikit flicker yang mengganggu, tetapi mungkin lebih baik daripada tidak sama sekali.


1
2017-07-03 20:33



Mungkin Anda dapat memosisikan layar aplikasi, lalu mengambil tangkapan layar, lalu mengembalikannya?


1
2017-08-13 05:03



IIRC, bukan di Windows pre-vista - dengan Aero setiap jendela memiliki buffer itu sendiri, tetapi sebelum itu, Anda hanya akan menggunakan metode Anda, untuk mendapatkan persegi panjang. Saya tidak yakin apakah pywin32 memiliki dukungan Aero atau tidak.


0
2017-07-03 20:28