Giriş Öncelikle harddisk'imizin marka/model, tip ve seri numarası gibi bilgileri öğrenmenin bize getireceklerinden kısaca bahsedelim. Yazılım konusunda her geliştiricinin kafasını kurcalayan bir konudur lisanslama sorunu. Bir yazılım yaratırken sadece kendi belirlediğimiz kişilerin bu yazılımı kullanabilmesini isteyebiliriz . Bu nedenle zaman içerisinde çeşitli kontrol mekanizmaları ve yöntemleri geliştirilmiştir. Bunlardan bazılarına değinelim: İlk yöntem "Activation" adı verilen ve sizin tarafınızdan belirlenen ve programa atanan bir kullanıcı numarasının internet üzerindeki bir sunucu tarafından kontrol edilmesi yöntemidir. Bu yöntem büyük yazılım şirketleri tarafından sıkça kullanılmaktadır. Kullanıcı numarası her açılışta kontrol ediliyorsa, kullanıcının programı kullanırken sürekli olarak internete bağlı kalması gibi bir zorunluluk vardır. Bu da bir dezavantaj olarak karşımıza çıkmaktadır. Ayrıca bu numarayı kontrol eden sunucunun da bir maliyeti vardır. Diğer bir yöntem Harddisk Volume Serial Number denen numarayla yazılımı özdeşleştirmektir. Bu yöntem pek kullanışlı değildir, zira harddisk her format'landığında yeni bir numara yaratılmaktadır. Bizim yazımızda inceleyeceğimiz konu, başka bir yöntem olan, yazılımımızı harddisk'in üretici tarafından belirlenen ve ürüne atanan seri numarası ile özdeşleştirme yöntemiyle ilgilidir. Bu şekilde yapılacak bir lisanslama ile yazılım sadece belirlenen/izin verilen sabitdisk ile çalışacaktır. Yazının ilerleyen bölümlerinde yaratacağımız proje ile edindiğimiz bilgileri bu şekilde kullanabiliriz. Bu bilgiler tabiki sadece lisanslama alanında kullanılmaz, ileride bahsedeceğimiz WMI'ın sınıfları içerisinden benzer yöntemlerle sistemin her parçası hakkında bilgi edinmek mümkündür. Bu yüzden kullanım alanı sınırsızdır. Bu konuda yaratıcılık size kalmıştır. WMI nedir? Açılımı Windows Management Instrumentation olan, Windows Yönetim Araçları/Yardımcıları olarak türkçeye çevrilen WMI, bir Windows işletim sistemi bileşenidir. Bu bileşen sistemdeki yönetim bilgilerine erişimi amaçlar, yönetim görevlerini yürütür, yürütmeye yardımcı olur. WMI, içerisinde Win32, Registry, System gibi sınıflar ve IIS, Active Directory, DNS provider gibi birçok sağlayıcı barındırır. WMI sınıfları ve sağlayıcıları hakkında detaylı bilgiye http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wmi_reference. asp adresinden erişebilirsiniz. System. Management isim alanı. NET Framework içerisindeki System isim alanlarından birisi olan System. Management, WMI yapısı içerisinde belirlenmiş sistem, sisteme bağlı olan aygıtlar ve uygulamalarla ilgili geniş bir yönetim bilgisine ve yönetim uygulamalarına erişimi sağlar. System. Management içerisindeki sınıflarla sistemimizdeki bileşenlere erişip bunlar hakkında -sağlanan- her türlü bilgiyi sorgulayabiliriz. Bu yüzden projemizde harddisk bilgisine erişmek için bu isim alanından (Spesifik olarak Win32_DiskDrive sınıfından) yararlanacağız. System. Management isim alanı ile ilgili detaylı bilgiye: http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemmanagement. asp adresinden erişebilirsiniz. Örnek Program Artık kodlamaya geçebiliriz. Yaratacağımız projede sadece bilgileri sistemden almakla ilgileneceğimiz için bir c# console uygulaması yaratarak işe başlıyoruz. Bahsettiğimiz gibi projemizin önemli bir kısmı için System. Management isim alanını kullanacağız. Bu isim alanı varsayılan olarak Reference bölümüne eklenmediği için. NET Component'leri arasından biz ekleyelim. Isim alanını kullanabilmek için de using direktiflerimiz arasına using System. Management; ifadesini ekleyelim. Öncelikle, erişmek istediğimiz bilgiler model, tip ve seri numarası olduğu için buna uygun, harddisk bilgilerinin tutulacağı bir sınıf hazırlayalım.

devammm class hardDisk { private object model = null; private object tip = null; private object seriNo = null; public object Model { get set } public object Tip { get set } public object SeriNo { get set } } Bu sınıfta private olarak tanımladığımız model, tip ve seriNo nesnelerine belirlediğimiz metotların içerisindeki get-set bloklarıyla eriştik. Burada veri tipi olarak object kullanmamızın sebebi WMI sınıflarından gelen verilerin object tipinde olması ve bu verileri ekrana yazdıracağımız Console. Writeline metodunun da object almasıdır. Istersek bu verileri string olarak tanımlayıp ToString metoduyla tür dönüşümü de yapabiliriz. Şimdi sıra geldi asıl işlevi yapacak olan Main metodumuzu yazmaya. Metodumuz içerisinde öncelikle sistemimizdeki harddiskler için bir koleksiyon tanımlamalıyız. Bunu yapabilmek için: using System. Collections; direktifini direktiflerimiz arasına ekliyoruz. Boylece using direktifleri aşağıdaki gibi görünecektir. using System; using System. Collections; using System. Management; Artık Main metodu içerisinde koleksiyonumuzu tanımlayabiliriz: ArrayList hddCollection = new ArrayList ; Bu bölümden sonra küçük bir sorunla karşı karşıya kalmaktayız : Sistemimizdeki harddisk'lerin bilgisine Win32_DiskDrive sınıfıyla erişilmektedir, fakat bu sınıf istediğimiz bilgi türlerinden sadece tip ve model değişkenlerini bize sağlamaktadır. Harddiskin seri numarasına ise Win32_PhysicalMedia sınıfıyla erişilebilmektedir. Bu yüzden bu sınıfları kullanarak bu bilgileri sırayla sorgulayacağız. Öncelikle gereken bilgilerin bir kısmını Win32_DiskDrive sınıfıyla sorgulayalım : ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT FROM Win32_DiskDrive"); foreach(ManagementObject disk in searcher. Get Bu kod ile ManagementObjectSearcher sınıfı yardımıyla taramamızı gerçekleştirecek nesneyi yarattık Görüldüğü gibi basit bir SELECT ifadesiyle bir veri tabanını sorgular gibi WMI'da tanımlanmış Win32_DiskDrive bilgisini elde ettik. Daha sonra sistemdeki her harddisk için ManagementObjectSearcher'ın Get metoduyla bilgileri alarak döngü içerisinde değişkenlerimize atadık ve her harddisk'i koleksiyonumuza ekledik. devamı var

eline sağlık dostum ama belirtmek isterimki ticari uygulamaların örnek mikro dos ve for win en son sürümüne kadar makina disk kodu değiştirilebilinir paylaşımına sağol

bu başta bahsettiğin seri harddiskin üzerinde yazan seri numarası değil mi? bir de mesajın sonunda bahsettiğin extra bilgi için referanslar nerede

devamm Şimdi de geriye kalan seri numarası bilgisini Win32_PhysicalMedia sınıfıyla sorgulayarak daha önceden koleksiyonumuza kattığımız harddisklerin bilgilerine ekleyelim : searcher = new ManagementObjectSearcher("SELECT FROM Win32_PhysicalMedia"); int index = 0; foreach(ManagementObject disk in searcher. Get Yine basit bir SELECT ifadesiyle Win32_PhysicalMedia bilgisini elde ettik. Burada bir index değişkeni kullanmamızın sebebi daha önceden belirlediğimiz koleksiyon elemanlarına erişmektir. Döngü içerisinde bu elemanlara sıradan erişerek eksik olan SeriNo bilgisini ekledik ve böylece tüm istenilen bilgiler tamamlanmış oldu. Artık son olarak bu bilgilerimizi ekrana yazdıracak bloğu yazacağız. Console. WriteLine ; Console. WriteLine ; Console. WriteLine ; Console. WriteLine ; index = 1; foreach { Console. WriteLine(" . Harddisk", index); Console. WriteLine ; Console. WriteLine ; Console. WriteLine ; Console. WriteLine ; Console. WriteLine ; ++index; } Console. ReadLine ; Görüldüğü gibi koleksiyondaki her sınıf üyesi için bilgileri şekilli bir biçimde tek tek ekrana yazdırdık. Son Olarak Bu makalemizde öncelikle yazılım sektöründe lisanslamaya daha sonra da kısaca WMI'a değindik, sağladığı bilgi ve yöntemlere erişmek için gereken System. Management isim alanını inceledik ve harddisk'imizle ilgili bilgileri ekrana yazdıran bir console uygulamasını c# dilinde yazdık. - A R E