Merhaba. Python’la ilgili bir çalışma yapıyorum. Çalışmam bir tuşa basıldığında kolayca ekran görüntüsünü alıp istediğim dizine kaydetme üzerine. PyAutoGui modülüyle basit bir şekilde ekran görüntüsü alabiliyorum ancak kullanılabilirlik açısından programı döngüye sokmam gerekiyor. Mesela S tuşuna basınca ekran görüntüsü alıyorum. Programı her ekran görüntüsünde tekrar çalıştırmak yerine döngü ile her S’ye basışımda ekran görüntüsü almasını sağladım. Fakat CMD ekranını arka plana attığım zaman, yani örnek olarak tarayıcıya tıklayıp S’ye bastığım zaman ekran görüntüsünü almıyor. İlla CMD ekranının ön planda olması gerekiyor görüntü alması için. Bunu engellemenin bir yolu var mı?
Merhaba,
Acaba aşağıda anlatılan yöntem işinize yarar mı?
Öncelikle pyxhook modülünü kurun:
pip install pyxhook
Pyxhook, basit bir keylogger’dır. Yani klavyeye bastığınız tuşları algılayan ve dilerseniz basılan tuşları sizin belirlediğiniz bir dosyaya kaydetmeye yarayan bir modüldür. Aşağıdaki örnek kod yapısına bir göz atın:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pyxhook
def dinle(event):
if event.Ascii == 113: # 113, q karakterinin ascii değeri.
# q'ya basınca program sonlanacak.
ornek.cancel()
# İkinci bir durum tanımlayalım, yani:
elif event.Ascii == 115: # 115, s karakterinin ascii değeri.
# Buraya da 's' tuşuna basılınca yapılması gereken işlemleri
# tanıtabilirsiniz.
print("\n{} harfine basıldı.".format(chr(event.Ascii)))
# HookManager sınıfından bir örnek oluşturulur.
ornek = pyxhook.HookManager()
# Bütün tuş vuruşları dinlenir.
ornek.KeyDown = dinle
# Klavye yakalanır
ornek.HookKeyboard()
# Yakalama başlatılır
ornek.start()
Yukarıdaki kodları bir kez çalıştırmanız yeterlidir. Programı kapatana veya “q” tuşuna basana kadar program arka planda çalışmaya devam eder. Örnek olsun diye “s” tuşuna basıldığında konsol ekranına yazı bastıran bir print fonksiyonu kullandım. Siz “s” tuşuna bastığınızda print() fonksiyonu yerine ekran görüntüsü almanızı sağlayacak olan başka bir fonksiyonu yazabilirsiniz.
Teşekkür ediyorum yanıtladığınız için. Farklı bir tuş kaydı alan modül kullanarak çözdüm sorunumu. Şimdi de başka bir problemle karşılaştım. Dosya işlemlerinde integer olarak işlem yapabiliyor muyuz? Çok uğraştım ama bir türlü çözemedim. Bir sayaç oluşturdum ve her tuşa basıldığında artmasını istiyorum. Buraya kadar basit bir işlem. sayac += 1 oluyor. Ancak bunu bir dosyanın içindeki sayı için yapmak istiyorum. Yani şöyle:
sayac değişkeninin her seferinde 1 artması gerekiyor ancak bir türlü arttıramadım. Yani bu işlem dosyanın içindeki 1 sayısına etki etmeli. Nasıl çözebilirim bunu?
Teşekkür ediyorum tekrar. Dediğiniz gibi yaptım ve istediğimi elde ettim fakat yine başka bir sorunla karşılaştım. Programı her kapatıp açtığımda saymaya sıfırdan başlıyor. Sizi uğraştırmamak için deminden beri çözümünü arıyorum, bir sürü yol deniyorum ama bir türlü başaramıyorum. Son çare olarak yine size sormak istedim. Program kapatılıp açıldığında kaldığı yerden saymaya devam etmesini nasıl sağlarım?
Sonsuz teşekkür ediyorum. Ben de dosyayı “a” kipiyle açıp dilimleme yöntemini uygulamaya çalışmıştım. Yani 12345 diye gidiyordu dosya ben de sadece son sayıyı kaydettiriyordum. Kısmen başarılı olabilmişti ama sizin yaptığınız çok daha verimli oldu.