Kayıt işlemleri için “winreg” kütüphanesi kullanılmaktadır. Bu kütüphanenin öğeleri kullanılmadan önce, kütüphane import edilmelidir.
import _winreg
Windows işletim sisteminde bir çok kök kayıt değeri vardır. HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE ve HKEY_USERS en önemli olanlarındandır.
HKEY_Degeri = _winreg.HKEY_CURRENT_USER
# Tam anahtar yolu da olabilir. Ornek: “HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”
# Butun HKEY Degerleri: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA, HKEY_USERS
Kayıt değerlerinin, dizin yapısına benzer bir mimarisi vardır. İşlem yapılacak kayıt değeri, anahtar, kayıt verisi… bu dizin yapısında bulunmaktadır.
anahtarYolu = “Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”
Bir kayıt nesnesine erişimler çeşitlilik gösterebilir. Örneğin, bir anahtar değeri için KEY_READ yetkisi alınmışsa, bu değer sadece okunabileceği için değiştirilemez.
erisimYetkisi= _winreg.KEY_ALL_ACCESS
# Butun Erisim Yetkileri: KEY_ALL_ACCESS, KEY_CREATE_LINK, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_EXECUTE, KEY_NOTIFY, KEY_QUERY_VALUE, KEY_READ, KEY_SET_VALUE
Bir kayıt değeri katar (string), ikili (binary),… gibi farklı tiplerde olabilir.
degerTipi = 4
# Onemli Deger Tipleri: REG_NONE = 0, REG_SZ = 1, REG_EXPAND_SZ = 2, REG_BINARY = 3, REG_DWORD = 4, REG_MULTI_SZ = 7,
Belirtilen temel bilgiler sayesinde Python’daki winreg modülü kullanılarak, kayıt nesneleri üzerinde işlemler yapılabilir.
Bir anahtar açılacaksa OpenKey metodu kullanılabilir.
print “Anahtara erisim aciliyor…”
anahtar = _winreg.OpenKey(HKEY_Degeri, anahtarYolu, 0, erisimYetkisi)
Bir anahtar hakkında detaylı bilgi almak için QueryInfoKey foksiyonu kullanılabilir.
altAnahtarAdedi, mevcutAnahtarinAltindakiDegerAdedi, mevcutAnahtarIcinSonDegisiklikTarihi = _winreg.QueryInfoKey(anahtar)
print “Bu anahtarin altindaki alt anahtarlarin adedi: ” + str(altAnahtarAdedi)
print “Bu anahtarin altindaki (alt anahtarlarinin degerleri dahil olmayacak sekilde) degerlerin adedi: ” + str(mevcutAnahtarinAltindakiDegerAdedi)
print “Bu anahtarin son degisiklik tarihi: ” + str(mevcutAnahtarIcinSonDegisiklikTarihi)
Bir anahtarın altındaki belli bir değer için sorgulamak için EnumValue kullanılabilir.
sira = 11
degerAdi, degerVerisi, degerTipi = _winreg.EnumValue(anahtar, sira)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin adi: ” + str(degerAdi)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin verisi: ” + str(degerVerisi)
print “Bu anahtarin altindaki ” + str(sira+1) + “. degerin tipi: ” + str(degerTipi)
Belli bir anahtarın altındaki alt anahtarı sorgulamak için EnumKey kullanılabilir.
sira = 2
altAnahtar = _winreg.EnumKey(anahtar, sira)
print “Bu anahtarin altindaki ” + str(sira+1) + “. alt anahtarin degeri: ” + altAnahtar
Bir anahtar altında yeni bir anahtar oluşturmak için CreateKey kullanılabilir.
print “Bu anahtarin altinda yeni bir anahtar olusturuluyor…”
yeniAnahtarAdi = “Yeni Anahtar Adi”
yeniAnahtar = _winreg.CreateKey(anahtar, yeniAnahtarAdi)
Bir anahtar altındaki bir anahtarı ve bu anahtarın altındaki değerleri silmek için DeleteKey kullanılabilir.
print “Bu anahtarin altinda mevcutta olan bir anahtar ve altindaki degerler siliniyor…”
mevcutAnahtarAdi = “Mevcutta Bulunan Bir Anahtar Adi”
_winreg.DeleteKey(anahtar, mevcutAnahtarAdi)
Bir anahtarın altındaki değerleri silmek için DeleteValue kullanılabilir.
print “Bu anahtarin altinda mevcutta olan bir deger siliniyor…”
mevcutDegerAdi = “Mevcutta Bulunan Bir Deger Adi”
_winreg.DeleteValue(anahtar, mevcutDegerAdi)
Bir değerin verisini ve tipini sorgulamak için QueryValueEx kullanılabilir.
mevcutDegerAdi = “Mevcutta Bulunan Bir Deger Adi”
degerVerisi, degerTipi = _winreg.QueryValueEx(anahtar, mevcutDegerAdi)
print “Bu anahtarin altindaki ” + mevcutDegerAdi + ” adindaki degerinin verisi: ” + str(degerVerisi)
print “Bu anahtarin altindaki ” + mevcutDegerAdi + ” adindaki degerinin tipi: ” + str(degerTipi)
Bir değerin verisini ve tipini ayarlamak için SetValueEx kullanılabilir.
degerAdi = “Deger Adi”
degerTipi = _winreg.REG_DWORD
ayarlananDegerinVerisi = 250
print “Yeni veya mevcutta olan degere (” + degerAdi + “) ” + str(ayarlananDegerinVerisi) + ” ataniyor”
_winreg.SetValueEx(anahtar, degerAdi, 0, degerTipi, ayarlananDegerinVerisi)
Not: Uzak bir bilgisayarın kayıt defterine bağlanarak bir işlem yapılması için ConnectRegistry kullanılabilir. Ancak bazı durumlarda düzgün olarak çalışmayabilmektedir.
# uzakMakine = “\\192.168.2.50”
# HKEY_Degeri = _winreg.HKEY_CURRENT_USER
# uzakKayitEditoru = _winreg.ConnectRegistry(uzakMakine, HKEY_Degeri)
# anahtarYolu = “Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings”
# uzakAnahtar = OpenKey(uzakKayitEditoru, anahtarYolu, 0, erisimYetkisi)
Uzak bir bilgisayarın kayıt defterine bağlanarak bir değer atanması için check_output modülü kullanılabilir.
from subprocess import check_output
uzakBilgisayarIpAdresi = “192.168.2.50”
uzakBilgisayarYoneticisi = “Ornek\Yonetici”
uzakBilgisayarYoneticisininParolasi = “Aa123456”tamAnahtarYolu = “\\\\” + uzakBilgisayarIpAdresi + “\HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server”
degerAdi = “fDenyTSConnections”
degerTipi = “REG_DWORD”
ayarlananDegerinVerisi = 0calistirilacakKomut = “net use ” + “\\\\” + uzakBilgisayarIpAdresi + “\C$ /USER:” + uzakBilgisayarYoneticisi + ” ” + uzakBilgisayarYoneticisininParolasi + ” && ” + “reg add ” + “\”” + tamAnahtarYolu + “\”” + ” /v ” + “\”” + degerAdi + “\”” + ” /t ” + degerTipi + ” /d ” + str(ayarlananDegerinVerisi) + ” /f”
print uzakBilgisayarIpAdresi + ” uzak bilgisayarinda calistirilacak olan komut: \n\t” + calistirilacakKomutcalistirilanKomutCiktisi = check_output(calistirilacakKomut, shell=True)
print “Komut ciktisi: \n\t” + calistirilanKomutCiktisi
Kaynak:
https://docs.python.org/2/library/_winreg.html