Vbs Registry değerini düzgün okumuyor


Vbs registry değerni düzgün okumuyor
Bilgisayar dilinde sayılar ikilik tabanda işlem görür fakat biz günlük hayatta onluk tabanı (decimal) kullanırız, yani bizler onluk sistemde komutları yazarız fakat bilgisayar bu işlemleri ikilik tabanda yürütür

çünkü bilgisayar sadece 1 ve 0 lardan anlar. Gelelim Signed ve Unsigned değerlere. Unsigned tamsayılar : 0 ve 255 aralığındaki pozitif değerlerdir. Signed tamsayılar ise hem Pozitif hemde negatif değerler alabilirler : -1 ve -128 ile 0 ve +127 aralığındaki sayılardır (8 bit numaralama sisteminde) gelelim konu başlığı ile bu anlatılanların alakasına.

Vbs ile unsigned integer değeri okutmak

Varsayalım elimizde aşağıdaki gibi bir registry anahtarı bulunsun

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder]
"Attributes"=dword:b0940064

Ve bizde bu anahtardaki "Attributes" değerini vbs de kodlayacağımız bir scriptte kullanıyor olalım.

Reg Dword

Anahtardaki Attributes değerine çift tıkladığımızda karşımıza Ondalık ve onaltılık olarak aşağıdaki değerler gelecektir

Ondalık Onaltılık

Scriptimizde bu anahtara bakıp belirli işlemler yaptırıyor olalım bu sebeple doğru okutulması son derece önemli olsun , kolaylık olsun diye önce anahtarda yazılanları ekrana getirmeye çalışalım. Belirli bir registry değerini okutmak için RegRead özelliğini kullanacağız. Bunun için aşağıdaki şekilde basit bir script oluşturduğumuzda

FileExt = "HKEY_CLASSES_ROOT\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}\ShellFolder\Attributes"
Set Shell = WScript.CreateObject("WScript.Shell")
St = Shell.RegRead(FileExt)
wscript.echo St

Bu script ile Attributes değerini okutabilir ve ekrana yansıtabiliriz kodu çalıştırdığımızda bize aşağıdaki çıktıyı verecektir.

unsigned integer

Ortada oldukça ilginç bir durum var , Bu rakamı okuduğu yerde böyle bir değer yok , peki ama script neden bize bu alaksız rakamı verdi ve doğru rakamı nasıl elde edebiliriz ? İşte tam bu noktada devreye signed ve Unsigned integer kavramları giriyor. Bu konudaki ayrıntılı açıklamalar için Bakınız. Tüm bu kavramları bir kenara bırakırsak ve daha sade bir dille soruyu tekrarlarsak ? ne yapalım ki Registrydeki değeri doğru okutalım ? Herşeyden önce registrydeki değer 32-bit unsigned integer dir gel gelelim VBScript bu değeri 32-bit signed integer olarak yorumlamaktadır bu sebeple de karşımıza alakasız bir rakam çıkmaktadır. gelelim çözüme :

1. Ya değeri Onaltılık (hexadecimal) şekilde alacağız

WScript.Echo Hex(St)

2. Ya da yanlış yorumlanmış değeri düzelteceğiz.

If St < 0 Then St = St + 2^32
WScript.Echo St

İlk baştaki kodlamamızda üstte verdiğimiz iki düzeltmeyi sırasıyla kullanırsak aşağıdaki gibi çıktılar alırız

vbs registry doğru okusun

Her iki düzeltmeyi içeren Vbs scriptlerini sayfa sonundaki indirme linkinden edinebilirsiniz. Böylece örneğimizdeki gibi Vbs ile REG_DWORD değeri okuturken alınan hatayı üstteki kodlar ile düzeltebilir ve gerçek değeri aldırtabilirsiniz.

- Vbs de veriyi registry değeri ile karşılaştırma Burada

- Vbs ile windows sürüm numarasını bulmak Burada

- Vbs ile bilgisayar ismi değiştirmek Burada

- vbs de mesaj kutuları Burada

- .vbs ile masaüstü kısayolu oluşturmak Burada


2 Yorum Var

Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Captcha