Bu makalemizde Process sınıfını kullanarak ne gibi işlemler yapabiliriz bunu detaylı örnekler ile anlatmaya çalışacağız.
Process sınıfını kullanarak neler yapabiliriz
Gerçekleştireceğimiz örnekler basitten daha işlevsel ve kapsamlı örneklere doğru gidecek şekilde hazırlanacak. Örneğimizi konsol uygulamasında gerçekleştireceğiz.
Process sınıfı ile gerçekleştireceğimiz ilk işlem static tek parametreli overload edilmiş Start metodunu kullanarak klasör, dosya açma ve web adreslerini tarayıcılarda bu metod ile nasıl açacağımızı göreceğiz.
Process sınıfını kullanabilmek için System.Diagnostics namespace’ini uygulamanıza dahil etmelisiniz.
Dizini Açma
Şimdi üstte bahsettiğimiz Start metodunu kullanarak C:\ dizinini Windows Gezgini ile açalım.
1 2 3 4 5 6 7 8 9 10 | using System.Diagnostics; class Program { static void Main() { // Process.Start metodunu burada kullanıyoruz. Process.Start("C:\\"); } } |
Dosyayı Açma
Bu örneğimizde ise example.txt dosyasını üstteki aynı overload edilmiş static Start metodu kullanarak işlemi gerçekleştireceğiz. alttaki koddada göreceğiniz üzere example.txt adlı dosyayı açma işlemini gerçekletireceğiz sadece example.txt yazarak herhangi bir yol belirtmediğimiz için Konsol uygulamamızın bin\Debug(Debug varsayılan Configuration’dır farklı bir configuration seçili ise ilgili klasörden devam edebilirsiniz.) exe uzantısının bulunduğu yolda arayacaktır eğer example.txt adlı bir dosya var ise açacak yoksa hata verecektir example.txt yerine C:\example.txt gibi yolu kesin olarakda belirtebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 | using System.Diagnostics; class Program { static void Main() { // "ornek.txt" adındaki dosya açılacak. // ... Konsol uygulamasının exe uzantısının olduğu yerde arayacaktır dosyayı. Process.Start("ornek.txt"); } } |
Not: Üstteki txt uzantılı dosya için sisteminizde hangi uygulama varsayılan olarak ayarlandı ise o uygulama ile açılacaktır o yüzden açılan uygulama sistemden sisteme farklılık gösterebilir. Belirtmiş olduğunuz dosyanın hangi uygulama ile açılacağı sonraki örneklerimizde göreceksiniz.
Web Sitesini Açma
Üstteki işlemlerden sonra aynı metodu kullanarak bir web sitesini açma işlemini gerçekleştireceğiz dosyayı açma kısmında düştüğümüz not’da olduğu gibi açılacak olan site sistemde varsayılan olan tarayıcı ile açılacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System.Diagnostics; class Program { static void Main() { // Google'da aranacak terimi metoda geçiyoruz. GoogleArama("muratoner.net"); } /// <summary> /// Google Arama Metodu /// </summary> static void GoogleArama(string t) { Process.Start("http://google.com/search?q=" + t); } } |
Dosyası Microsoft Word Dosyası ile Açma
Gears.docx adlı dosyayı Microsoft Word uygulaması ile açacağız. Eğer farklı bir ugyulama ile açmak isterseniz WINWORD.EXE yerine açmak istediğiniz uygulamayı girin. Microsoft Excel uygulaması ile açmak için EXCEL.EXE veya PowerPoint uygulaması için POWERPNT.EXE dosya adını parametre olarak geçebilirsiniz.
İşte şimdi ProcessStartInfo adındaki farklı bir sınıfı daha kodumuza dahil edip dosyayı açma işlemine hangi uygulama ile dosyayı açacağız aksiyonu ile kodlamaya devam edeceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | using System.Diagnostics; class Program { static void Main() { // ... Word dosyasına ait yol geçiliyor. OpenMicrosoftWord(@"C:\Users\Murat\Documents\Gears.docx"); } /// <summary> /// Word dökümanını açma işlemi /// </summary> static void OpenMicrosoftWord(string file) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "WINWORD.EXE"; startInfo.Arguments = file; Process.Start(startInfo); } } |
Özellikler
Bir program başlatırken nasıl başlayacak, verilecek parametreler ve nasıl açılacağı gibi v.b. kullanılacak özelliklerdir.
ProcessStartInfo: Özellikle uygulamanın nasıl başlayacağı ile ilgili ayarları saklamaktadır.
FileName: Program ve dosya çalıştırmak istiyorsanız. "WINWORD.EXE"
gibi sistemin Path’ine tanımlı olduğu için direk bu şekilde dosya adını yazarak yada dosyanın bulunduğu yol ile beraber dosya adını girerek uygulamayı çalıştırabilirsiniz. Bir dosyayı açmak için ise aynı şekilde dosya yolu ile beraber dosya adını yazmalısınız..
Arguments: Argümanları depolar, -flag’ler veya dosya adı gibi. String tipte bir özelliktir.
CreateNoWindow: Bir programı pencere oluşturmadan yada açmadan sessizce arka planda işlemi halletmek için kullanabilirsiniz.
WindowStyle: Pencereleri gizlemek için kullanılacak bir enum özelliğidir. Gizlemek için ProcessWindowStyle.Hidden
enum değeri kullanılmaktadır.
UserName, WorkingDirectory, Domain:Bunlar işletim sistemine özgü özelliklerdir—Daha karmaşık durumlar için kullanılmaktadır.
Metodlar
Kill
Kill metodu ile işlemi sonlandırabiliriz şimdi ufak bir örnek ile Notepad uygulaması yani Not defteri uygulamasını açacağız ve 2 saniye sonra kill metodu ile kapatacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | using System.Diagnostics; using System.Threading; class Program { private static void Kill() { // notepad başlatılıyor. Process process = Process.Start("notepad.exe"); // 2 saniye bekliyoruz. Thread.Sleep(2000); // notepad'i kapatıyoruz. process.Kill(); } static void Main(string[] args) { // Notepad uygulaması başlatılacak ve 2 saniye sonra notepad uygulaması kill metodu sayesinde kapatılacak. Kill(); } } |
GetProcesses
Sistemde o an çalışan işlemlerin tümü bu metod ile array olarak dönderilmektedir.
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 | using System; using System.Diagnostics; class Program { private static void GetProcesses() { // Lokal bilgisayarda çalışan tüm işlemler getiriliyor. Process[] processes = Process.GetProcesses(); // Toplam sayı bastırılıyor. Console.WriteLine("Toplam: {0}", processes.Length); // tüm işlemler dögü ile dönülüp processId konsola basılıyor. foreach (Process process in processes) { Console.WriteLine(process.Id); } } static void Main(string[] args) { // Tüm işlemler konsola bastırılıyor. GetProcesses(); Console.ReadLine(); } } |
Çıktı
1 2 3 4 5 6 7 8 | Count: <i id="E">7</i> 388 5312 1564 972 2152 936 3132 |
Toplamda 7 çalışan işlemimiz varmış ve bu işlemlere ait process Id’ler konsol’a bastırıldı.
GetProcessesByName
İşlem adını girerek açık olan uygulamanın işlemlerine erişebilirsiniz. Bu metod ile ilgili yapacağımız örnekte açık olan chrome uygulamasının işlemlerine erişmeye çalışacağız ve her 5 saniyede bir konsola kaç uygulamamın çalıştığı bastırılacak.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Diagnostics; using System.Threading; class Program { private static void GetProcessesByName(string processName) { while (true) { // Lokal bilgisayarda çalışan processName değişkeninde belirtilen işlemler getiriliyor. Process[] processes = Process.GetProcessesByName(processName); // Toplam sayı bastırılıyor. Console.WriteLine("{0} " + processName + " işlemi çalışıyor.", processes.Length); Thread.Sleep(5000); } } static void Main(string[] args) { // chrome uygulamasına ait kaç işlem olduğunu konsola yazacağım 5 saniyede bir. GetProcessesByName("chrome"); } } |
Çıktı
1 2 3 4 5 6 | 23 chrome işlemi çalışıyor. 23 chrome işlemi çalışıyor. 22 chrome işlemi çalışıyor. 22 chrome işlemi çalışıyor. 22 chrome işlemi çalışıyor. 0 chrome işlemi çalışıyor. |
Chrome eklentiler yüzünden baya işlem çalıştırmakta arkada 23 chrome işlemi çalışıyor denmesine rağmen tek bir chrome penceresi ve bir sayfa açık olmasına rağmen 23 işlem olduğunu söylüyor eklenti sayısına göre arkada çalışan işlem sayısı değişiklik gösterecektir. Açık olan tek chrome penceresini kapatmama rağmen sadece 22’ye düştü herhangi bir chrome pencerem açık değil ve değer 22 olarak kaldı sağ altta sistem çubuğundan chrome’a sağ tuş çıkış dediğimde chrome’a ait işlem sayısı sıfıra indi. Ayrıca chrome çok-işlemli model mantığı ile çalıştığından aynı anda birden fazla işlem çalıştırabilmektedir. Her açtığınız sekme içinde ayrı bir process açtığını göreceksiniz.
Not: Görev yöneticisinden baktığınızda chrome.exe olarak yer alan işlem adı için processName metod değişkenine chrome olarak geçtik sizde bu metodu kullanırken exe uzantısı olmadan kullanma dikkat ediniz.
GetProcessById
İşlev bir üstteki GetProcessByName ile aynı tek farkı processAdı yerine processId değerini alıyor parametre olarak alternatif olarak kullanabileceğiniz metod olabilir. Tek farkı bu olduğundan örnek yapma gereksinimi duymadım.
Kodlu günler geçirmeniz dileğiyle.
nice information read it must.thank you for share it