Mac adresini öğrenme


Deprecated: Function create_function() is deprecated in /var/www/vhosts/digitaldunyam.net/coder.digitaldunyam.net/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

C# veya VB.net projelerimizden kullanmak için bilgisayarınızın mac adresini öğrenmek isteyebiliriz. Örneğin lisanslama, tekil kullanım vs. ihtiyaçlar için mac adresi ile işlemler yapmak isteyebiliriz. Hikayeyi fazla uzatmadan bilgisayarın mac adresini nasıl öğreniriz, basit bir uygulama ile öğrenelim.

mac-adres-ogrenme

Resimdeki gibi form ekranına bir buton ekleyip kod kısmına geçebiliriz. Mac adresini bulabilmek için Management nesnesine ihtiyacımız olacak. Projemize eklemek için projeye sağ tuş tıklayıp Add Referance e tıklayıp System.Management resimdeki gibi ekleyin.

mac-adresi-system-managament

Referansı ekledikten sonra kod kısmında using System.Management; ekleyin. Bunları yaptıktan sonra bilgisayarın mac adresini mesaj olarak alabilmek için butonun clik olayına tıklayarak kod kısmında devam edebiliriz.

C#

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(MAC());
}

private string MAC()
{
ManagementClass manager = new ManagementClass("Win32_NetworkAdapterConfiguration");
foreach (ManagementObject obj in manager.GetInstances())
{
if ((bool)obj["IPEnabled"])
{
return obj["MacAddress"].ToString();
}
}
return String.Empty;
}

Mac adresini gösterebilmek MessageBox içerisine MAC metodundan dönen sonucu gösterdik. İşlem bu kadar.

VB.net

Private Sub button1_Click(sender As Object, e As EventArgs)
    MessageBox.Show(MAC())
End Sub

Private Function MAC() As String
    Dim manager As New ManagementClass("Win32_NetworkAdapterConfiguration")
    For Each obj As ManagementObject In manager.GetInstances()
        If CBool(obj("IPEnabled")) Then
            Return obj("MacAddress").ToString()
        End If
    Next
    Return [String].Empty
End Function

[wpdm_file id=4]

Yapılan uygulamayı yukarıdaki buton yardımıyla indirebilirsiniz.

Xml dosyasını veritabanı olarak kullanma

Xml ile az çok uğraşanlar bilir tanımını ne işe yaradığını. Onun için hakkında pek fazla konuşmayacağım. Yalnız tanımına ayrıkırı bir örnek paylaşacağım için bir şeyler söylemeden geçemeyeceğim.

Xml nedir diye sorunca hemen herkes wikipedia ‘ya sarılır ve merakını giderir. Kullanımı hakkında yazılan yazıda; “Rastgele veri erişimine uygun olmadığından veri tabanı amaçlı kullanılmamaktadır.” ibaresi içermektedir. Bunun nedeni herhangi bir kısıtlama olmadan normal bir şekilde okunabilir olması.  Örneğin .mdb uzantılı database dosyasına sağ tıkladığımızda verileri okuyamıyoruz. Ancak xml basit bir not defterinde yardımıyla bile okunabilmekte.  Biz bu ibareyi es geçip xml dosyasını veritabanı olarak nasıl kullanırız basit bir örnekle öğrenelim.(Tanımda veritabanı olarak kullanamazsınız demiyor nede olsa)

xml-dosya-kayit

Xml dosyasını veritabanı veya sadece bir tablo olarak verimli bir şekilde kullanabilmek için database deki gibi tabloda her kayıtta artan id numarasına ihtiyacımız olacaktır. Bu ihtiyacı nasıl giderebiliriz, xml dosyasını nası veritabanı gibi kullanabiliriz, buyrun örnekte görelim..

veritabani-gibi-kullanma

Resimdeki gibi boş bir forma 2 button bir label ve bir adet textbox ekleyerek kod kısmına geçebiliriz. Öncelikle boş xml dosyası oluşturmak için btnXmlOlusutur isimli butonunun clik olayına gelerek alttaki kodları uygulayalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 private void btnXmlOlusutur_Click(object sender, EventArgs e)
{
if (!File.Exists("xmldosyam.xml")) // Daha önceden dosyanın var olduğunu kontrol ettik. Dosya yoksa .xml uzantılı xmldosyam adında dosya oluşturma işlemine başladık.
{
XmlTextWriter xmlolustur = new XmlTextWriter("xmldosyam.xml", null); // XmlTextWriter sınıfından oluşturacağımız dosya özellikleri için nesne oluşturduk.

xmlolustur.WriteStartDocument();

xmlolustur.WriteComment("Oluşturulan xml hakkında bilgi"); //// Dosya hakkında bilgi ekledik.

xmlolustur.WriteStartElement("Baslangic"); // Başlangıç elementi gibi özellikleri ekledik.

xmlolustur.WriteEndDocument();
xmlolustur.Close();

label1.Text = "Dosya programın bulunduğu dizine oluşturuldu.";
}
else
{
MessageBox.Show("Oluşturulmadı"); // Daha önceden dosya varsa veya herhangi bir hatada buradaki mesajı verir.
}

}

Gerekli kod açıklamaları kodlar içinde mevcut. (Anketten dolayı haddinden fazla detaya girdiğim için özür dilerim)

Dosya oluşturma işlemini yaptıktan sonra oluşturulan xml dosyamız içine standart bir veri tabanındaki tablo yapısı gibi otomatik artan id kolonlu kayıt gerçekleştirelim. Bunun için txtKayitAdi isimli metin kutumuza girilen karakteri xml dosyasına kayıt etme işlemine geçelim. Bunun için btnEkle isimli butonun clik olayına gelip alttaki kodları girelim.

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
private void btnEkle_Click(object sender, EventArgs e)
        {
            bool varmi = false;
            int enBuyukId;

            XmlDocument doc = new XmlDocument(); // Xml dosyamızı okumak için XmlDocument sınıfından yararlanıyoruz.
            doc.Load("xmldosyam.xml");
            XmlElement root = doc.DocumentElement;
            XmlNodeList kayitlar = root.SelectNodes("/Baslangic/Kullanicilar"); // Xml içindeki istediğimiz kayıtlara ulaşabilmek için yolu tanımlıyoruz. Bunu veritabanı içindeki
            // tablo olarak düşünebilirsiniz. Bu yol ile Kullanicilar tablosuna yani listesine ulaşıp kayıtları XmlNodeList sınıfından oluşturduğumuz kayitlar isimli

            if (kayitlar.Count > 0) // Her yeni kayıta otomatik farklı id numarası verebilmek için bir önceki kayıtın id numarasına göre işlem yapmamız gerekecek. Burada ilk kayıt varmı kontrol ediyoruz. Varsa, kayıtlar içinde en büyük idyi yani numarayı bulup üzerine 1 ekletip yeni kayıt için hazırlıyoruz. Yoksa, daha önce kayıt oluşturulmamışsa ilk kayıt numarasını 0 atayıp kayıt için gönderiyoruz.
            {
                varmi = true;
            }

            if (varmi == true)
            {
                int[] kayittakiSayilar = new int[kayitlar.Count]; // Kayıt sayısı kadar dizi tanımaldık.

                int i = 0; // Diziyi arttırmak için sayı tanımladık.
                foreach (XmlNode secilen in kayitlar)
                {
                    kayittakiSayilar[i] = Convert.ToInt32(secilen["id"].InnerText); // Kayıtlardaki tüm id yani numaraları kayittakiSayilar dizisi içine ekledik.
                    i = i + 1;
                }

                Array.Sort(kayittakiSayilar); // kayittakiSayilar dizisi içinde bulunan sayılardan en büyüğünü bulabilmek için Array sınıfını kullandık. Bulunan en büyük sayıya 1 ekledik.
                enBuyukId = kayittakiSayilar[kayittakiSayilar.Length - 1];
                enBuyukId = enBuyukId + 1;

            }
            else
            {
                enBuyukId = 0;
            }

            if (File.Exists("xmldosyam.xml")) // Xml dosyamıza kayıt eklemede hata almamak için dosyanın var olup olmadığını kontrol ediyoruz.
            {

                XmlElement UserElement = doc.CreateElement("Kullanicilar"); // Veritabanından tablo ismi gibi düşünbebilirsiniz.

                XmlElement id = doc.CreateElement("id"); //Oluşturulan xml içindeki Kullanicilar elementine id isimli element (DB deki gibi düşünürsek Kullanicilar tablosuna id kolonunu ekliyoruz.)
                id.InnerText = enBuyukId.ToString();
                UserElement.AppendChild(id);

                XmlElement adi = doc.CreateElement("adi"); // İkinci elementi ekliyoruz.(Yani ikinci kolonu)
                adi.InnerText = txtKayitAdi.Text;
                UserElement.AppendChild(adi);

                doc.DocumentElement.AppendChild(UserElement);

                XmlTextWriter xmleekle = new XmlTextWriter("xmldosyam.xml", null);
                xmleekle.Formatting = Formatting.Indented;
                doc.WriteContentTo(xmleekle);
                xmleekle.Close();

                label1.Text = "Kayıt eklendi."; // Kayıt işlemi başarılı bir şekilde bittikten sonra mesaj için label kullanabilirsiniz.
            }
        }
    }

Gerekli kod açıklamalarını kodlar içinde bulabilirsiniz. Oluşturulan, xmldosyam.xml dosyasını programın exe sinin olduğu yerde bula bilirsiniz. Veya oluştururken, kayıt ekerken istediğiniz dosyaya koyup işlem yapabilirsiniz.   Bu gibi uygulamayı; telefon rehberi, gizlilik gerektirmeyen kayıt giriş çıkış gibi programlar için örnek alabilirsiniz.

Vb.net kodlarına ve yorum satırı olmayan kodlara ulaşmak için alttaki numaraları kullanarak diğer sayfaya geçebilirsiniz.

Formlar arası veri taşıma

Web uygulamarın da sayfalar arasında veri taşınıldığı  gibi  masaüstü uygulamalarında da formlar arası veri taşına bilmekte. Örneğin kullanıcı sistemi ile çalışan masaüstü programında, kullanıcı girişi yapıldıktan sonraki kısımlarda  giriş yapan kullanıcı bilgisini(id, kullanıcı adı vs.) formlar arasında geçiş yaptırabiliyoruz. Veya en basit bir formda yapılan işlem sonucu başka bir formda yazdırabiliriz. Örnekler çok…

formlar-arasi-veri-transferi

Formlar arası veri transferini sağlamak için, web uygulamalarında olduğu gibi projeye c# için .cs uzantılı CodeFile boş kod dosyası ekleyip içerisine alttaki gibi bir sınıf ve değişken tanımlayın.

C#

1
2
3
4
static class globalsinifim
{
public static string kullanici = null;
}

Bu tanımladığımız sınıf ve değişkeni kullanabilmek için projemiz içinde herhangi bir form da aşağıdaki gibi kullanabiliriz.

1
globalsinifim.kullanici = textBox1.Text; 

Bu şekildeki bir örnekte formda textbox daki değeri global değişkenimize atadık. Taşıyacağımız diğer Form2 formunda global değişkene atadığımız değeri kullanabilmek, örneğin label da gösterebilmek için yapılması gereken;

1
label1.Text = globalsinifim.kullanici; 

şeklinde istediğimiz formda kullanabiliriz.

Visual Basic

Vb.net tarafında benzer şekilde .vb uzantılı boş CodeFile dosyası oluşturup değişken tanımlayın. Visual Basic tarafındaki tek fark oluşturduğunuz dosya adında modul oluşturmak. C# tarafında oluşturulan dosya ismi önemsizdi. Çünkü içindeki sınıf üzerinden değişken tanımlanmaktaydı.

Vb tarafında durum biraz farklı, oluşturulan boş kod ismi ile module ismi aynı olması gerekir. Projeye CodeFile.vb dosyası ekleyip ismini globalsinifim olarak değiştirin. Alttaki kodları girin.

Module globalsinifim

Public kullanici As String = Nothing

End Module

<code>Module globalsinifim</code>

Public kullanici As String = Nothing

End Module

Herhangi bir form da global değişkenimizi aşağıdaki gibi kullanabiliriz.

globalsinifim.kullanici = textBox1.Text

Başka bir formda veriyi gösterebilmek için kullanımı;

label1.Text = globalsinifim.kullanici 

şeklinde istediğimiz formda kullanabiliriz.