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
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.
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
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.
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
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
Teşekürler Tolga genelde internette Signed , unsigned integer örnekeri C++ dillerinde verilmiş.
programlama dilleri ile uğraşan arkadaşlar için güzel bir kaynak olmuş.