Home > Visual C# > Membuat Wi-Fi Profiles sendiri

Membuat Wi-Fi Profiles sendiri

November 19, 2011

Ada hal rutin yang saya lakukan setiap pagi dan sore, ketika ngantor saya harus mengeset ip statis menyesuaikan ip kantor sedangkan ketika di kos saya harus mengeset ip menjadi dinamis.

Masalah sepele memang tapi lumayan memakan waktu dan membosankan dan saya belum tau (setidaknya untuk saat ini) apakah OS (win 7) yang sy pake menyediakan solusi untuk masalah ini.

Dari teman kantor saya sudah dapat file batch untuk masalah ini, skripnya lebih kurang seperti berikut :

@ECHO OFF
Set varan=Wireless Network Connection
Set varip=172.xx.xx.xx
Set varnm=255.255.0.0
Set vargw=172.xx.xx.xxx
Set vardns1=202.xx.x.x
Set vardns2=202.xx.x.x

ECHO Auto Setting IP (arif.laksito@gmail.com)
ECHO for: "%varan%"
ECHO ---------------------------------------------

ECHO Setting "IP Address", "Subnet Mask" and "Gateway"
netsh interface ipv4 set address name="%varan%" source=static address=%varip% mask=%varnm% gateway=%vargw%

ECHO Setting "Primary DNS"
netsh interface ipv4 add dnsserver name="%varan%" address=%vardns1% index=1

ECHO Setting "Secondary DNS"
netsh interface ipv4 add dnsserver name="%varan%" address=%vardns2% index=2

Sedangkan untuk mengeset ke ip dinamis skripnya lebih sederhana lagi

@ECHO OFF
Set varan=Wireless Network Connection
ECHO Auto Setting IP to DHCP (arif.laksito@gmail.com)
ECHO ---------------------------------------------

ECHO Setting "IP Address", "Subnet Mask" and "Gateway" to DHCP
netsh interface ipv4 set address name="%varan%" source=dhcp

ECHO Setting "DNS" to DHCP
Netsh interface ipv4 set dnsserver "%varan%" dhcp

Kedua skrip diatas sebenarnya sudah menyelesaikan permasalahan, tapi… ada yang kurang sebagai seorang proGAMMER et… sory maksudnya programmer😀 tentunya kita akan sedikit penasaran bagaimana mengeksekusi skrip diatas via program.

Untuk VB 6 sudah saya bahas tuntas dibeberapa postingan saya, tapi untuk kali ini kita menggunakan bahasa C#, yuph inilah bahasa yang sedang sy gandrungi saat ini🙂, semua project sy terutama yang baru, saya paksain menggunakan bahasa ini, karena pelan2x tapi pasti VB 6 akan segera ditingalkan😥

Yuph intronya kita cukupkan sampai disini, untuk desain GUI aplikasinya seperti berikut :

Beberapa method penting yang digunakan oleh aplikasi ini sebagai berikut :

1. Mendapatkan daftar Network Connection
Untuk mendapatkan daftar network saya menggunakan perintah

netsh int ip show config

Untuk menjalankan perintah diatas saya menggunakan method ExecuteCommand, kemampuan lain dari method ini adalah menampung output dari perintah yang dijalankan.

Untuk contoh disini outputnya saya tampung ke dalam variabel output.

private void ExecuteCommand(string cmd, string parameter, int timeout, bool redirectStandardOutput)
{
    Process p = new Process();

    p.StartInfo.FileName = cmd;
    p.StartInfo.Arguments = parameter;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.RedirectStandardOutput = redirectStandardOutput;

    try
    {
        p.Start();

        if (redirectStandardOutput)
        {
            p.BeginOutputReadLine();
            p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
        }

        p.WaitForExit(timeout);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    finally
    {
        p.Close();
    }
}

Untuk selanjutnya variabel output saya olah di method GetNetworkConnections

private string[] GetNetworkConnections()
{
    string[] arrNetwork = null;

    if (output.Count > 0)
    {
        arrNetwork = new string[output.Count];
        int index = 0;
        foreach (string var in output)
        {
            string[] networkConnection = var.Split('\"');
            arrNetwork[index] = networkConnection[1];

            index++;
        }
    }

    return arrNetwork;
}

2. Akses registry
Untuk meningkatkan kemampuan program ini saya juga menambahkan method untuk menulis dan membaca registry, sehingga perubahan terakhir bisa tersimpan dan diload kembali pada saat program dijalankan.

// method untuk membaca registry
private string GetValue(string key, string value)
{
    return Registry.CurrentUser.OpenSubKey(key).GetValue(value).ToString();
}

// method untuk menulis registry
private void WriteValue(string key, string valueName, string value)
{
    Registry.CurrentUser.CreateSubKey(key).SetValue(valueName, value);
}

// method untuk membaca setting program terakhir
private void GetSetting()
{
    output.Clear();
    ExecuteCommand("netsh", "int ip show config", timeout, true);
    cmbNetworkConnection.Items.AddRange(GetNetworkConnections());

    string defaultNetwork = string.Empty;

    RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(key);
    if (registryKey != null)
    {
        defaultNetwork = GetValue(key, "DefaultNetwork");
        txtIPAddress.Text = GetValue(key, "IPAddress");
        txtSubnetMask.Text = GetValue(key, "SubnetMask");
        txtDefaultGateway.Text = GetValue(key, "DefaultGateway");
        txtDnsServer1.Text = GetValue(key, "DnsServer1");
        txtDnsServer2.Text = GetValue(key, "DnsServer2");

        switch (GetValue(key, "IPAktif"))
        {
            case "1": // dinamis
                rdoIPDinamis.Checked = true;
                break;

            case "2": // statis
                rdoIPStatis.Checked = true;
                break;

            default:
                rdoIPDinamis.Checked = true;
                break;
        }

        groupBox1.Enabled = rdoIPStatis.Checked;
    }
    else
    {
        // do nothing
    }

    if (defaultNetwork.Length > 0)
    {
        if (cmbNetworkConnection.Items.Count > 0) cmbNetworkConnection.Text = defaultNetwork;
    }
    else
    {
        if (cmbNetworkConnection.Items.Count > 0) cmbNetworkConnection.SelectedIndex = 0;
    }
}

Sebagai penutup berikut adalah kode pada saat menekan tombol Ok.

private void btnOk_Click(object sender, EventArgs e)
{
    string parameter = string.Empty;

    if (MessageBox.Show("Apakah proses ingin dilanjutkan ?", "Konfirmasi", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
    {
        Cursor.Current = Cursors.WaitCursor;
        btnOk.Enabled = false;

        if (rdoIPDinamis.Checked) // ip dinamis
        {
            parameter = "interface ipv4 set address name=\"" + cmbNetworkConnection.Text + "\" source=dhcp";
            ExecuteCommand("netsh", parameter, timeout, false);

            parameter = "interface ipv4 set dnsserver \"" + cmbNetworkConnection.Text + "\" dhcp";
            ExecuteCommand("netsh", parameter, timeout, false);
        }
        else // ip statis
        {
            parameter = "interface ipv4 set address name=\"" + cmbNetworkConnection.Text + "\" source=static address=" + txtIPAddress.Text + " mask=" + txtSubnetMask.Text + " gateway=" + txtDefaultGateway.Text;
            ExecuteCommand("netsh", parameter, timeout, false);

            parameter = "interface ipv4 add dnsserver name=\"" + cmbNetworkConnection.Text + "\" address=" + txtDnsServer1.Text + " index=1";
            ExecuteCommand("netsh", parameter, timeout, false);

            parameter = "interface ipv4 add dnsserver name=\"" + cmbNetworkConnection.Text + "\" address=" + txtDnsServer2.Text + " index=2";
            ExecuteCommand("netsh", parameter, timeout, false);

            WriteValue(key, "IPAddress", txtIPAddress.Text);
            WriteValue(key, "SubnetMask", txtSubnetMask.Text);
            WriteValue(key, "DefaultGateway", txtDefaultGateway.Text);
            WriteValue(key, "DnsServer1", txtDnsServer1.Text);
            WriteValue(key, "DnsServer2", txtDnsServer2.Text);
        }

        WriteValue(key, "DefaultNetwork", cmbNetworkConnection.Text);
        WriteValue(key, "IPAktif", rdoIPDinamis.Checked ? "1" : "2");
        btnOk.Enabled = true;

        Cursor.Current = Cursors.Default;
    }
}

Selamat MENCOBA🙂

  1. afat
    November 19, 2011 at 12:28 pm

    yups sayang sekali vb 6 mulai di tinggalkan. bu, itulah perkembangan, ada hilang dan ada yang datang….. thq bgt post’a,🙂

  2. afat
    November 19, 2011 at 12:29 pm

    wah salah ketik tuhh

    • November 21, 2011 at 4:08 am

      Yg mana om ?

  3. ayah dedo
    May 14, 2012 at 12:15 pm

    ass. mas bisa ngasih saran gak, untuk sy yg masih “berkutat” di vb6. SIM ditempat sy masih “murni” vb6 malah terkesan yang penting jalan (gak ada kode yg aneh, apalagi class yg rumit hehe).. untuk transisi sebaiknya sy pindah ke bahasa apa ya. sy belum sedikitpun menulis kode di vb.net

    • May 18, 2012 at 1:39 pm

      Klo basicnya VB 6 lebih cepat ke VB .NET aja om, kecuali om punya basic seperti C, C++, atw Java mungkin bisa langsung ke C#

  1. April 16, 2014 at 9:14 am
Comments are closed.
%d bloggers like this: