Namespacelerle beraber bizlere birçok işlemde yardımcı olabilicek metodlar gelmiştir. Bunların hepsini biranda öğrenmek mümkün değildir. İşe yarayanlarıyla beraber uygulamaya ve öğrenmeye başlayınca ne kadar işlevsel olduğunu görüp, zaman ve sabırla araştırmak bize namespaceler ile çeşitli metodların ne kadar önemli olduğunu gösterecektir. Bu makale de konu olarak uygulamalarımızda bize yardımcı olabilecek temel kısayolları ve ipuçlarını esas almıştır. Şimdi sorulara ve cevaplara geçelim J
1. Uygulamamızın içinden başka bir exe dosyasını nasıl çalıştırırız?
System.Diagnostics.Process islem = new System.Diagnostics.Process();
islem.StartInfo.FileName = "calc.exe";
islem.StartInfo.Arguments = "";
islem.Start();
FileName özelliği çalıştırılacak olan dosyanın ismini belirler. Eğer sistem içerisinde bilinen exe dosyası ise sadece adını yazmak yeterlidir. Ama sistem tarafından tanınmıyorsa tam adresini yazmak gerekir. Sistemin tanıdığı dosyaların adresleri “path” sistem değişkenine tanımlanmıştır.
Arguments özelliği ise dosya açılırken kullanılması gereken parametreler varsa onları belirlemek için kullanılır. Aşağıdaki kod parçasında Excel uygulaması test.xls dosyası ile birlikte açılmaktadır.
System.Diagnostics.Process islem = new System.Diagnostics.Process();
islem.StartInfo.FileName = @"C:\Program Files\Microsoft Office\Office11\EXCEL.EXE";
islem.StartInfo.Arguments = @"C:\test.xls";
islem.Start();
Aşağıdaki kod parçacıkları da aynı işlevi yerine getirirler:
System.Diagnostics.Process.Start("calc.exe");
//ve
System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", @"C:\test.xls");
2.Uygulamamızın exe dosyasının çalıştığı klasör gibi çevre bilgilerini nasıl bulabilirim?
Aşağıdaki örnekte “Environment” sınıfı kullanılmıştır. Environment sınıfı ayrıca özel klasörlere ulaşmamızı da sağlar. Örneğin içerisinde bir Button ve RichTextBox bulunmaktadır. Aşağıdaki kod Button nesnesinin Click eventine yazılacak olan kod parçasıdır.
string sonmetin = "";
sonmetin += "aktif klasör:\t\t" + Environment.CurrentDirectory.ToString();
sonmetin += "\nbilgisayar ismi:\t\t" + Environment.MachineName;
sonmetin += "\nişletim sistemi:\t\t" + Environment.OSVersion.Platform + " / " + Environment.OSVersion.Version;
sonmetin += "\nsistemklasörü:\t\t" + Environment.SystemDirectory;
sonmetin += "\nbilgisayarın açık kalma süresi:\t" + Environment.TickCount / 1000;
sonmetin += "\naktif kullanıcı:\t\t" + Environment.UserName;
sonmetin+= "\nkullanılabilir hafıza:\t\t" + Environment.WorkingSet / 1024 + "KB";
sonmetin+= "\nFramework Versiyonu:\t" + Environment.Version.ToString();
this.richTextBox1.Text=sonmetin;
3. Sistemdeki IP adreslerini nasıl bulabilirim?
Formumuzda bir button ve bir listbox olduğunu düşünelim. Button’un click eventine şunları yazıyoruz:
System.Net.IPAddress[] adresler = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList;
foreach (System.Net.IPAddress adr in adresler)
{
this.listBox1.Items.Add(adr.ToString());
}
4. Uygulamanın exe dosyasının adresini nasıl bulabilirim?
Bu bilgiye ulaşmanın birden fazla yolu vardır. Aşağıdaki üç satır da bu bilgiyi bizlere bulacaktır:
-> Application.ExecutablePath
-> Environment.CurrentDirectory
-> AppDomain.CurrentDomain.BaseDirectory
5. Bir içerik menüsünü belli bir süre sonra otomatik olarak nasıl kapatabilirim?
İçerik menüleri sağ tıklayarak açılan menülerdir. Normalde by menüden bir seçenek seçene kadar kapanmazlar. Ancak aşağıdaki örnekte bu menü 2 saniye sonra kapanmaktadır. Bu örnek için bir ContextMenuStrip ve bir Timer nesnesi gerekmektedir. ContextMenuStrip nesnesine birkaç öğe ekledikten sonra kodlarımızı yazmaya başlayabiliriz.
privatevoid timer1_Tick(object sender, EventArgs e)
{
//bu satırıda kullanabiliriz
//SendKeys.Send("(ESC)";
//bu satırı da kullanabiliriz
SendKeys.Send(Keys.Escape.ToString());
this.timer1.Stop();
}
privatevoid contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
this.timer1.Interval = 2000;
this.timer1.Start();
}
SendKeys sınıfının send metodu klavye tuşlarına basılmasa da basılmış gibi davranılmasını sağlar.
6. Textbox gibi metin nesnelerinin varsayılan içerik menülerini nasıl iptal edebilirim?
privatevoid Form1_Load(object sender, EventArgs e)
{
this.textBox1.ContextMenu = newContextMenu();
}
7. Fare imlecinin o anki konumunu nasıl bulabilirim?
privatevoid button1_Click(object sender, EventArgs e)
{
Point p = Cursor.Position;
MessageBox.Show(p.X + " : " + p.Y);
}
Yukarıdaki kod parçası fare imlecinin ekranın sol üst köşesine göre koordinatlarını bulmaktadır. Formun sol üst noktasının koordinatlarını bulmak için aşağıdaki kodu kullanabilirsiniz:
privatevoid button1_Click(object sender, EventArgs e)
{
Point p = Cursor.Position;
MessageBox.Show((p.X - this.Location.X) + " : " + (p.Y - this.Location.Y));
}
8. Bir bilgisayarın Mac adresini nasıl bulabilirim ?
Bunun için öncelikle using System.Diagnostics;namespaceini mutlaka projemize eklememiz gerekmektedir.
string IP = "193.1.1.197";
string str2 = " ";
ProcessStartInfo info1 = newProcessStartInfo();
Process p = newProcess();
info1.FileName = "nbtstat";
info1.RedirectStandardInput = false;
info1.RedirectStandardOutput = true;
info1.Arguments = "-A " + IP;
info1.UseShellExecute = false;
p = Process.Start(info1);
while (str2 != null)
{
try
{
str2 = p.StandardOutput.ReadLine();
int sonuc = str2.Trim().ToLower().IndexOf("mac adress", 0);
if (sonuc > -1)
{
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " / " + ex.StackTrace);
}
}
MessageBox.Show(str2);
Makalemizin ilk bölümü böylelikle sonlanmakta. İkinci bölümünde de yine bu şekilde birkaç ipucunu öğrenip, kısayolları kavrayacağız. Umarım faydalı olmuştur. 2. bölümde görüşmek üzere :)
Kaynaklar:
Microsoft C#.Net Step by Step – John Sharp, Jon Jagger
Visual C#.Net 2005 – Abdullah Zengin