Merhaba, bu dersimizde C# Process İşlemleri – Neler Yapılabilir? konusuna bakacağız. Process Sınıfı her projemizde bir kaç kez kullanabileceğimiz bir sınıftır. Bu konu da bir istek gelmesinden dolayı ve bu dersim eğitim setimde olmamasının büyük bir eksiklik olmasından ötürü eklemek istedim. Gelin Bu Prccess Sınıfı ile neler yapabiliriz görelim.
C# Process İşlemleri – Neler Yapılabilir?
Öncelike Process Sınıfı ile neler yapabileceğimize biraz bakalım. Sonrasında örnekler ile anlatımını yapacağım.
- Özellikleri
- Bir Klasörü Açmak
- Bir Dosyayı Açmak
- Bir Web Sitesini Açmak
- Bir Dosyayı Bir Uygulama ile Açmak
- Çalışmakta Olan İşlemlerin Listesini Almak
- Çalışmakta Olan Bir Uygulamanın Alt İşlem Listesini Almak
- Çalışmakta Olan Bir Uygulamayı Kapatmak
Örneklere başlamadan önce projemize aşağıdaki NameSpace’i ekleyelim.
Use System.Diagnostics;
Bu dersi github projeme ekleyeceğimden dolayı bir form tasarımı yaptım ve onun üzerinden işlemlerimi yapacağım. Ekran görüntüsü aşağıdaki gibidir. Aldığımız listeler de görseldeki gibidir.
Bu işlem için özel olarak D:\\ sürücüsüne bir Deneme.txt dosyası oluşturtuyorum. İşlemlerimizi de ona göre yapacağız.
C# Process İşlemleri
Özellikleri
ProcessStartInfo, Process sınıfı için bir özelliktir ve bir uygulamanın nasıl başlatılacağı hakkındaki bilgileri tutar.
FileName, Windows işletim sistemin Path’ıne tanımlanmış bir uygulama ise bir yol yazmadan uygulamaları çalıştırabiliriz. Örneğin Windows Office bilgsayara kurulu olduğundan bir yol yazmadan WINWORD.EXE uygulamasını çalıştırabiliyoruz. Bunun haricinde Hesap makinaso (calc.exe), Metin Belgesi (notepad.exe) gibi windows’un kendi içinde gelen uygulamalarını da yol göstermeden çalıştırabilirsiniz. Ancak farklı bir uygulama ise, örneğin programınızın güncellemesini yapan başka bir programınız var ve bunu açmak isterseniz yolu ile birlikte vermiş olmalısınız.
Arguments: Argümanları tutar, -flag’ler veya dosya adı gibi. String türünde veri alır.
CreateNoWindow: Uygulamayı bir ekran olmadan açar. Yani uygulama açılır ama arka planda kalır. Görev yöneticisini açtığında görebilirsiniz. Arka planda çalışmasını istediğiniz uygulamalar için kullanabilirsiniz.
WindowStyle: Pencereyi gizlemek için kullanılır. Bir Enum özelliğidir. izlemek için ProcessWindowStyle.Hidden
enum değeri kullanılmaktadır.
UserName, WorkingDirectory, Domain: Bunlar daha kapsamlı işler için gereklidir ve işletim sistemin özel durumlardır.
Process Bir Klasörü Açmak
Process sınıfı ile gerçekleştireceğimiz ilk işlem olan klasör açmayı static tek parametreli overload edilmiş Start metodunu kullanacağız. Bu metodu bir kaç örneğimizde de kullanacağız.
private void btn_klasor_ac_Click(object sender, EventArgs e) { Process.Start(txt_klasor.Text); }
Bu kod satırı D dizinini Windows Gezgini (explorer.exe) ile açacaktır.
Process Bir Dosyayı Açmak
private void btn_dosya_ac_Click(object sender, EventArgs e) { Process.Start(txt_dosya.Text); }
Bu kod satırı projemizin Exe dosyasının yer aldığı klasördeki Deneme.txt dosyasını Metin Belgesi (notepad.exe) ile açacaktır.
Process Bir Web Sitesini Açmak
private void btn_google_Click(object sender, EventArgs e) { Process.Start("http://google.com/search?q=" + txt_google_ara.Text); }
Yukarda google ‘da arama yapacak kodlarımız yer alıyor. Gönderdiğimiz metni, Process sınıfını kullanarak Google Chrome üzerinde (varsayılan internet tarayıcı hangisi ise) arama url’si ile çalıştırdık. Yani Google Chrome açıldığında, metoda gönderdiğimiz metnin arama sonuçlarını göreceğiz.
Process Bir Dosyayı Bir Uygulama ile Açmak
Bu örneğimizde bir *.txt dosyasını Word ile açacağız.
ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "WINWORD.EXE"; startInfo.Arguments = txt_word_ile.Text; Process.Start(startInfo);
Burada ProcessStartInfo özelliğini kullandık. Bu sınıfta yukarıda verdiğim namespace ile geliyor. Bir dosyayı bir uygulama ile açmak istersek ProcessStartInfo özelliğini kullanmamız gerekir. FileName özelliği ile ProcessStartInfo ile dosyayı açacağımız uygulamayı belirliyoruz. Sonrasına Arguments özelliği ile de hangi dosyayı bu uygulama ile açmak istediğimizi belirliyoruz.
Bu belirlemeleri yaptıktan sonra da Process sınıfının Start metoduna hazırladığımız ProcessStartInfo özelliğini gönderiyoruz.
NOT: Start Metodu sadece string parametresi almamaktadır. Bir OverLoad metod olduğundan dolayı bir den fazla türde parametre alabilir. Bir metodun OverLoad olması hakkındaki dersime bağlantıya tıklayarak ulaşabilirsiniz.
Process Çalışmakta Olan Uygulamaların Listesini Almak
O anda sistem üzerinde çalışan tüm uygulamaların listesini Array olarak verir. Listemizi alacağız ve ListBox nesnesine yükleyeceğiz.
private void btn_islemler_liste_Click(object sender, EventArgs e) { IslemlerListesi(); } void IslemlerListesi() { Process[] islemler = Process.GetProcesses(); list_islemler.Items.Add(string.Format("Toplam: {0}", islemler.Length)); list_islemler.Items.Add("------------"); foreach (Process islem in islemler) { list_islemler.Items.Add(islem.Id); } }
Burada işlemleri alacak bir metod hazırladık. GetProcess() metodu ile işlemler listesini alıyoruz ve ForEach göngüsü ile listbox’a yüklüyoruz. İşlemleri ListBox’a yüklemeden önce kaç adet işlem çalıştığı bilgisini de ilk satıra yazıp araya bir ayraç satırı ekliyoruz. Yukarıdaki görselde soldaki listedir.
Process Çalışmakta Olan Bir Uygulamanın Alt İşlem Listesini Almak
Bir uygulamanın alt işlemlerini ID bilgileri ile bulup listbox’a alacağız.Yukarıdaki görselimize göre gideceğiz ve Google Chrome’nin alt işlemlerinin listesini alacağız.
private void btn_islemler_adi_Click(object sender, EventArgs e) { Process[] islemler = Process.GetProcessesByName(txt_aranacak_islem.Text); list_islemler_adlari.Items.Add(txt_aranacak_islem.Text + " Adı İle " + islemler.Length + " Adet İşlem Çalışıyor"); list_islemler_adlari.Items.Add("--------------"); foreach (Process islem in islemler) { list_islemler_adlari.Items.Add(" " + txt_aranacak_islem.Text + " işlemi çalışıyor. ID = " + islem.Id); } }
GetProcessesByName() metodu ile chrome (chrome.exe den dolayı. Uzantısı olmadan yazıyoruz.) adında ve altında çalışan tüm uygulamaları bize IDleri ile birlikte listeliyor. Yukarıdaki görselde sağdaki listedir.
Process Çalışmakta Olan Bir Uygulamayı Kapatmak
Bir işlemi kapatmak için Kill() metodunu kullanıyoruz.
Burada farklı bir işlem yapacağız. Yukarıdaki görseldeki solda yer alan listedeki bir iteme tıklandığında satırın bilgisini textbox’a alıyoruz. Eğer tıklanan satrsa bir ID var ise o işlemi kapatmaya çalışıyoruz. Eğer ilk iki satırsan birine yani ID olmayan bir satıra tıklanmış ise bir metin belgesini açıp kapatacağız.
private void list_islemler_SelectedIndexChanged(object sender, EventArgs e) { txt_id_ile_kapat.Text = list_islemler.SelectedItem.ToString(); } private void btn_islem_kapat_Click(object sender, EventArgs e) { try { Process[] islemler = Process.GetProcesses(); foreach (Process islem in islemler) if (islem.Id == Convert.ToInt32(txt_id_ile_kapat.Text)) { try { islem.Kill(); IslemlerListesi(); } catch (Win32Exception) { MessageBox.Show("Bu işlem kapatılamaz."); } break; } } catch (FormatException) { Process islem = Process.Start("notepad.exe"); System.Threading.Thread.Sleep(3000); islem.Kill(); } }
İlk olarak listbox’ta tıklanan satırdaki veriyi bir textbox’a yazdık. Eğer texbox’a alınan veri bir int değil ise (yani ID değil ise) Try bloğumuz bir FormatException yakalayacaktır. Eğer bu olursa bir ID seçilmemiş olacağını bildiğimizden işlemi yapmış olmak adına bir metin belgesi açıp 3 saniye sonra açtığımız metin belgesini kapatıyoruz.
Listbox’ta sadece ID bilgisini görebiliyoruz. Bu sebeple kapatmak istediğimiz işlemin ne olduğunu bilemiyoruz. Bir sistem uygulamasını kapatmaya çalışırsak iç Try ‘da Win32Exception yakalayacaktır. Eğer Win32Exception hatası yakalanır ise bunun bir sistem işlemi olduğunu bildiğimizden dolayı bir uyarı mesajı veriyoruz.
NOT: Bu Exception ‘ları nasıl bulacağınızı merak ediyorsanız C# Hata Yakalama – Try Catch Finally – Ayrıntılı Anlatım yazımı mutlaka incelemelisiniz.
C# Process İşlemleri – Neler Yapılabilir? dersimiz de bu kadar arkadaşlar.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersimde github projemde yerini almıştır.
Hiçbir yerde bulamayacağınız kaliteli ve çalışan kodlar için Takipte ve Sağlıcakla kalın.