-

Aygıt Yöneticisini Gerçek Zamanlı İzleme

Bu betik ile Windows Aygıt Yöneticisi'nde meydana gelen değişiklikleri (örn. bir aygıtın çıkarılması, yeni aygıt eklenmesi vb.) anlık olarak tespit edebilirsiniz.

Kullanım

Bu script bir Python betiğidir, çalıştırabilmek için bilgisayarınızda Python yüklü olmalıdır.
Buraya tıklayarak indirme sayfasına ulaşabilirsiniz.

real-time-devmon-tracking.py
import sys
import subprocess
import time
from datetime import datetime

def check_and_install_requirements():
    try:
        import win32com.client
        return True
    except ImportError:
        print("\nUYARI: Bu scriptin çalışması için 'pywin32' kütüphanesinin yüklü olması gerekir.")
        while True:
            response = input("Kütüphane şimdi yüklensin mi? (E/H): ").strip().lower()
            if response in ['e', 'evet']:
                try:
                    print("Yükleniyor, lütfen bekleyin...")
                    subprocess.check_call([sys.executable, "-m", "pip", "install", "pywin32"])
                    print("Kurulum başarıyla tamamlandı!\n")
                    return True
                except subprocess.CalledProcessError as e:
                    print(f"Kurulum başarısız oldu. Hata: {e}")
                    print("Lütfen terminalden 'pip install pywin32' komutunu manuel olarak çalıştırın.")
                    return False
            elif response in ['h', 'hayır']:
                print("Kurulum reddedildi. Program sonlandırılıyor.")
                return False
            else:
                print("Lütfen 'E' (Evet) veya 'H' (Hayır) giriniz.")

def device_monitor():
    if not check_and_install_requirements():
        return

    import win32com.client

    print("Windows Aygıt Yöneticisi İzleniyor (WQL Modu)...")
    print("Çıkış yapmak için Ctrl+C tuşlarına basın.")
    print("-" * 50)

    try:
        wmi = win32com.client.GetObject("winmgmts:root\\cimv2")
        query = "SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PnPEntity'"
        watcher = wmi.ExecNotificationQuery(query)
        
        print("Sistem başarıyla dinleniyor. Lütfen bir USB aygıtı takıp çıkarın.")

        while True:
            try:
                event = watcher.NextEvent()
                device = event.TargetInstance
                event_type = event.Path_.Class
                name = device.Caption or device.Name or "Bilinmeyen Aygıt"
                category = device.PNPClass or "Bilinmeyen Kategori"
                device_id = device.DeviceID or "Kimlik Yok"
                timestamp = datetime.now().strftime("%H:%M:%S")

                if event_type == "__InstanceCreationEvent":
                    print(f"[{timestamp}] [+] {category} kategorisine \"{name}\" adında aygıt EKLENDİ.")
                    print(f"    -> Donanım Kimliği: {device_id}\n")
                
                elif event_type == "__InstanceDeletionEvent":
                    print(f"[{timestamp}] [-] {category} kategorisinden \"{name}\" adında bir aygıt KALDIRILDI.")
                    print(f"    -> Donanım Kimliği: {device_id}\n")

            except Exception as e:
                print(f"Hata detayı: {e}")
                time.sleep(0.5)

    except KeyboardInterrupt:
        print("\nİzleme sonlandırıldı.")
    except Exception as e:
        print(f"\nKritik Hata: {e}")
        print("Lütfen scripti yönetici olarak çalıştırmayı deneyin.")

if __name__ == "__main__":
    device_monitor()