ForumTayfa  

Geri git   ForumTayfa > Programlama Bölümü > Programlama > C / C++ / C#
Kayıt ol Yardım Üye Listesi Forumları Okundu Kabul Et

Cevapla
 
LinkBack Seçenekler Stil
Alt 28.12.06, 14:30   #1 (permalink)
Sil_Baştan
 
silentwolf - ait Kullanıcı Resmi (Avatar)
 
Üyelik tarihi: Dec 2006
Nerden: İstanbul
Mesaj Sayısı: 2.014
Konu Sayısı: 111
Takım: Fenerbahçe
Rep Gücü: 2768
Rep Puanı: 276454
Rep Derecesi : silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000silentwolf 0-120000
Ruh Hali:


Standart 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...
__________________
bir silahım olsaydı...




hiç bir farklılık ayrımcılığa neden olamaz.
Hürriyet Hürriyettir.

silentwolf isimli Üye şuanda  online konumundadır   Alıntı ile Cevapla
Cevapla



Seçenekler
Stil

Yetkileriniz
Yeni Mesaj yazma yetkiniz aktif değil dir.
Mesajlara Cevap verme yetkiniz aktif değil dir.
Eklenti ekleme yetkiniz aktif değil dir.
Kendi Mesajınızı değiştirme yetkiniz aktif değil dir.

Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık




Powered by vBulletin Version 3.6.4
Copyright ©2000 - 2007, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
ForumTayfa

Arşiv: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237


ForumTayfa - Link Değişimi
ForumTayfa.Net | Sahil Oto | Nazhar | MySpace TopSites | Voip Destek | | Tamamıucuz.com | Link Değişimine Katılın |
ForumTayfa - Toplist
eXTReMe Tracker
Sitemiz bir forum sitesi olduğundan dolayı, kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir. ForumTayfa Yöneticileri mesajları itina ile kontrol etse de, bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Yine de sitemizde yasalara aykırı unsurlar bulursanız iletisim@forumtayfa.com email adresine bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.
Any member of our web site has the right of adding comments instantly without getting permisson due to the forum structure of our site basis. Althought, our site modarators check comments with care, all the responsibilities sourced from these comments directly belong to the members. If you still find any illegal content in our site ( A.buse, H.arassment, S.camming, H.acking, W.arez, C.rack, D.ivx, Mp.3 or any Illegal Activity ), please report us via iletisim@forumtayfa.com .Your reports will be evaluated as soon as the arrival of your e-mail.