HarbiForum  

C# ile WMI Nasıl Kullanılır?

C,C++,C# bölümde C# ile WMI Nasıl Kullanılır? konusu, WMI (Windows Managment Interface), Windows 2000 ve sonrası işletim sistemlerinde bulunan, windows programcılarına işletim sisteminde bulunan hemen hemen her nesneyi ...
HarbiForum > Bilgisayar & Teknoloji > Programlama Dilleri > C,C++,C#

Kayıt ol Arama Bugünki Mesajlar
27.07.07, 12:02   #1
C# ile WMI Nasıl Kullanılır?

WMI (Windows Managment Interface), Windows 2000 ve sonrası işletim sistemlerinde bulunan, windows programcılarına işletim sisteminde bulunan hemen hemen her nesneyi denetleme ve yönetme olanağı sunan bir arabirimdir.
WMI kullanılarak Windows işletim sistemindeki dosya ayarlarından güvenlik ayarlarına kadar hemen her şey denetlenebilir ve WMI’ın sunduğu metodlarla değerleri değiştirilebilir. WMI hem yerel hem de uzak makinelerde kullanılabilir, programlaması ise oldukça kolaydır.

WMI’ın, bulunduğu makine üzerinde farklı “Namespace” leri vardır. Varsayılan olarak bu “\\makine\root\default“ tur. Fakat içinde bizim için gerekli olan “WMI Class” larını barındıran “\\makine\root\cimv2 “ Namespace’ini kullanacağız. Bir “WMI Class”’ı Windows işletim sistemi üzerindeki bir nesnenin (Örneğin bir dosyanın) özelliklerini barındıran ve gerektiğinde sahip olduğu metodları kullanarak nesneye ait değerleri değiştirebilen bir sınıftır. Örnek olarak “Win32_Process” “cimv2” namespace’i içinde bir WMI sınıfıdır ve işletim sistemi üzerinde çalışan süreçleri görmek, istenildiğinde ise belirli bir süreci sonlandırmak veya yeni bir süreç başlatmak için kullanılabilir. Bir Windows işletim sistemi üzerindeki WMI sınıfları “wbemtest.exe” programı yardımıyla görülebilir.

Windows XP de yaklaşık 900 WMI sınıfı vardır ve bu sınıfların yapabildikleri WMI verimliliği konusunda size bir fikir verebilir. Aşağıdaki resimlerde, “wbemtest.exe” programının işletim sistemi üzerindeki bütün WMI sınıflarını sıralanması ve istenilen sınıfın özelliklerini ve kullanabileceği metodları gösterilmesi anlatılmaktadır.




Bu pencerede içeriğini görmek istediginiz sınıfın üzerine çift tıklayın.


Kırmızı daireler içinde, makinedeki sabit diskler hakkında bilgi alan (Örneğin blok sayısı veya başlık bilgisi gibi) ve diskler üzerinde bazı işlemler yapabilen Win32_LogicalDisk sınıfı görülüyor(ikinci daire).

Aşağıda yerel ya da uzak bir sistemde çalışan süreçleri gösteren, ve seçilen bir süreci sonlandırabilen basit bir uygulama örneği bulunmaktadır. Bu uygulamada Win32_Process sınıfını kullandım. Süreçleri listelemek için myListView adında bir listView kontrolü ve bu listView’in “Name”,”Parent Process ID”, “Process ID”, “Executable Path” olarak 4 tane sütunu olduğunu varsaydım.

.Net altındaki ListView kontrolü konu dışı olduğundan burada ele alınmayacaktır.

Bu kodu yazarken System.Managment NameSpace’i kullanılmıştır, bunun için System.Managment sınıfını koda referans olarak eklemelisiniz.(Kodun başına da using System.Managment; deyimini koymayı unutmayın )

string[] lvItem = new string[4]; //süreçlerin Listview’in sütunlarına ait bilgilerin depolanacağı dizi
string machineName = “MachineName”; //başlanılacak makine adı
ManagementObjectSearcher mySearcher; //nesne sorgusunu çalıştırıp, dönen değerleri
//toplayacak olan ManagmentObjectSearcher
ManagementObjectCollection myObjectCollection; //mySearcher’dan dönen nesnelerin
//depolanacağı ObjectCollection
ObjectQuery oq; //sorgu stringini tutacak nesne sorgusu
ConnectionOptions co = new ConnectionOptions(); //uzak makine bağlantısında
//kullanılacak bağlantı seçeneklerini tutmak için
co.Username = “username”;
co.Password = “Password” ;
//burada unutulmaması gereken şey yerel makineye yapılan bağlantılarda kullanıcı adı ve şifre
//kullanamayacağınızdır. Yerel makine bağlantısı giriş yaptığnız aktif kullanıcı hesabı ve bu
//hesabın hakları çerçevesinde gerçekleşir . Böyle bir durumda kullanıcı adı ve şifresini boş bırakın
//managment scope üzerinde sorgu gerçekleştirecegimiz WMI namespace’ini tanımlamaktadır.
ManagmentScope ms = new ManagmentScope(“\\\\” + machineName + “\\root\\cimv2”,co);
oq = new ObjectQuery(“SELECT * FROM Win32_Process”); //sorgu string’i
mySearcher = new ManagmentObjectSearcher(ms,oq);
// ms scope’u içinde oq sorgusu kullanılarak, ilgili nesneler toplanacak
myObjectCollection = mySearcher.Get();
//mySearcher da belirtilen sorgu çalı tırılıyor ve geri dönen nesneler myObjectCollection içinde toplanıyor.
// aşağıda dönen her nesnenin (burada myObject” özellikleri alınıyor (““ içindeki ifadeler)
//ve değerleri string veri tipine çevrilerek lvItem dizisine aktarılıyor. Sonra lvItem dizisindeki
//değerler myItem adındaki ListView kontrolü nesnesine geçiriliyor. (Dikkat edilecek nokta ise
//lvItem uzunluğunun myListView kontrolündeki sütun sayısına eşit olduğudur. Sütunlardaki
//değerler ListView kontrolünde SubItem olarak adlandırılır.)

foreach (ManagmentObject myObject in myObjectCollection)
{
lvItem[0] = myObject[“Name”].ToString();
lvItem[1] = myObject[“ParentProcessId”].ToString();
lvItem[2] = myObject[“ProcessId”].ToString();
try
{
lvItem[4] = myObject[“ExecutablePath”].ToString();
}
catch
{
lvItem[4] = “not available”;
} ListViewItem myItem = new ListViewItem(lvItem);
myListView.Items.Add(myItem);
}

//foreach dongüsü içindeki try/catch blo u bazı süreçlerin(SystemIdleProcess gibi)
//ExecutablePath de erinin olmadı ı dü ünülerek konulmustur. Bu durumda kod hata üretmek
//yerine kontrolün “Executable Path” sütununa deger olarak “not available” girecektir.
//Artık süreçleri sıralayıp ListView da görebildigimize göre seçilen süreci öldüren kodu yazabiliriz:
//myListView kontrolündeki mouse olaylarını izlemek için a a ıdaki olay i eyicisini tanımladık. Bu olay
//tetiklendi i zaman yani kontrol üzerinde mouse hareketi oldugunda, “myListView_mouseDown”
//metodu ça rılacaktır. Bu olay i leyicisi sınıfın InitializeComponent() metodunda tanımlanmalıdır.

this.myListView.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.myList View_mouseDown); //burası tek satır

//artık asıl kodumuza geçebiliriz.

private void myListView_MouseDown(object sender, MouseEventArgs e)
{
ContextMenu conMenu = new ContextMenu(); //sa mouse tu u tıklandı ında açılacak menü
MenuItem killProcess; //menu içinde yer alacak menuItem
// gerçekle en bir mouse hareketinin sa tu tıklaması olup olmadı ı denetleniyor
if (e.Button == MouseButtons.Right)
{
myListView.ContextMenu = conMenu;
killProcess = new MenuItem();
killProcess.Text = “Terminate Process”;
conMenu.MenuItems.Add(killProcess);
killProcess.Click += new EventHandler(killProcess_Click); // killProcess menu nesnesi
//tıklanıp tıklanmadı ını denetleyecek olay i leyicisi, tıklanırsa killProcess_Click
//metodunu ça ıracaktır.
}
}
private void killProcess_Click(object sender, EventArgs e)
{
string processID = myListView.SelectedItems[0].SubItems[2].Text;
string processName = myListView.SelectedItems[0].SubItems[0].Text;
string queryString = "SELECT * FROM Win32_Process WHERE ProcessID
='" + processID +"'"; //burası tek satır
ObjectQuery objq = new ObjectQuery(queryString);
ManagementScope ms = new ManagementScope("\\\\"+ MachineName +
"\\root\\cimv2"); //burası tek satır
ManagementObjectSearcher objSearch = new
ManagementObjectSearcher(ms,objq); //burası tek satır
ManagementObjectCollection objqColl ;
objqColl = objSearch.Get();
ListViewItem lvItem;
try
{
foreach (ManagementObject mo in objqColl)
{
mo.InvokeMethod("Terminate",null);
}
lvItem = processList.SelectedItems[0];
lvItem.Remove();
MessageBox.Show(processName +" has been successfully terminated");
}
catch(Exception ex)
{
MessageBox.Show("Error Terminating "+ //burası tek satır
processList.SelectedItems[0].SubItems[0].Text+" because: "+ex.ToString());
}
}

Umarım bu döküman okuyanlara faydalı olur.
İyi çalışmalar...
 
Cevap Yaz

C# ile WMI Nasıl Kullanılır?

C,C++,C# bölümde C# ile WMI Nasıl Kullanılır? konusu, WMI (Windows Managment Interface), Windows 2000 ve sonrası işletim sistemlerinde bulunan, windows programcılarına işletim sisteminde bulunan hemen hemen her nesneyi ...



En Popüler Etiketler
Etiketler
c wmi, wmi c, c nasıl kullanılır, managementscope kullanımı, c right clik menü, işletim sistemini izleme c, mouse kodları nasıl kullanılır,

Benzer Konular

Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
sendne sonrasını nasıl anlatmalı nasıl yaşamalı GAMZELİ Şiir Pınarı 2 21.04.08 17:03
dosya yöneticileri nasıl kullanılır Dj_BuRKi Programlar & Oyunlar 0 06.09.07 08:57
Göz kalemi ve eyeliner nasıl kullanılır? şeker Moda 1 13.07.07 19:01



Forum Zaman Ayarları GMT +3 olarak ayarlanmıştır.
Şu Anki Saat: 21:48 .


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
HarbiForum; Haybeden Değil ,Harbiden
Her Hakkı Saklıdır ©2007-2009
Valid XHTML 1.0 Transitional Creative Commons License
İçeriğimizi başka bir sitede paylaşıyorsanız lütfen kaynak belirtmeyi unutmayın,ilginize teşekkür ederiz.
Sitemizde bulunan bir içeriğin telif haklarına veya yasalara aykırı olduğunu düşünüyorsanız lütfen bize bildirin.
If you own the copyrights to any content we publish or offer for download & you want them to be removed from our web site,
please contact us with some proof of ownership of copyright and they will be removed immediately.