delphi Dns ve İp adresleri girme

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

- Önce okuma işi bitsin, yazma ondan sonra gelecek... :D

- Yazma kısmını silerek sadece okuma kısmını bir proje haline getirdim. Bu linkten indirip denersin.

- Bu kodları sindirmen zaman alacak. :idea:

Kaynak Kodu :

Kod: Tümünü seç

Uses Registry;

Procedure ListeIcineNICveGUID( Bilgiler:TStrings );
Const
  NetworkKEY = '\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}';
Var
  Reg    : TRegistry;
  strKey,
  strDriverDesc,
  strNetCfgInstanceId : String;
  Liste  : TStringList;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKeyReadonly( NetworkKEY ) then
  begin
    Liste := TStringList.Create;
    Reg.GetKeyNames( Liste );
    while Liste.Count > 0 do
    begin
      // Tekrar bir önceki, üst ağaç dalına dönüyoruz...
      Reg.OpenKeyReadonly( NetworkKEY );
      strKey := Liste[0];
      if Reg.KeyExists(strKey) then
      begin
        Reg.OpenKeyReadOnly( strKey );
        strDriverDesc       := Reg.ReadString('DriverDesc');
        strNetCfgInstanceId := Reg.ReadString('NetCfgInstanceId');
        if ( Pos( 'ETHERNET', UpperCase(strDriverDesc) ) > 0 )
        or ( Pos( 'LAN',      UpperCase(strDriverDesc) ) > 0 )
        or ( Pos( 'NIC',      UpperCase(strDriverDesc) ) > 0 )
        then Bilgiler.Add( Format('"%s" : %s', [strDriverDesc, strNetCfgInstanceId]) );
      end;
      Liste.Delete(0);
    end;
    Liste.Free;
  end;
  Reg.Free;
end;

Type tIPBilgileri = Record
  OtomatikIP       : Boolean;
  DhcpIPAddress,
  DhcpNameServer,
  DhcpServer,
  DhcpSubnetMask,
  DhcpDefaultGateway,
  IPAddress,
  SubnetMask,
  DNS1, DNS2       : String;
end;

Function IpBilgileriAl( NetCfgInstanceId: String ):tIPBilgileri;
Const
  AyarlarKEY = '\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces';
Var
  Reg       : TRegistry;
  strDeger  : String;
  DataType,
  DataSize  : Cardinal;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKeyReadonly( AyarlarKEY + '\' + NetCfgInstanceId );

  Result.DhcpIPAddress  := Reg.ReadString('DhcpIPAddress');  // REG_SZ
  Result.DhcpNameServer := Reg.ReadString('DhcpNameServer'); // REG_SZ
  Result.DhcpServer     := Reg.ReadString('DhcpServer');     // REG_SZ
  Result.DhcpSubnetMask := Reg.ReadString('DhcpSubnetMask'); // REG_SZ

  if Reg.ReadInteger('EnableDHCP' ) = 1                      // REG_DWORD
    then Result.OtomatikIP := True
    else Result.OtomatikIP := False;

  if Reg.ValueExists('DhcpDefaultGateway') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('DhcpDefaultGateway'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('DhcpDefaultGateway'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.DhcpDefaultGateway := strDeger;
  end;

  if Reg.ValueExists('IPAddress') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('IPAddress'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('IPAddress'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.IPAddress := strDeger;
  end;

  if Reg.ValueExists('SubnetMask') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('SubnetMask'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('SubnetMask'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.SubnetMask := strDeger;
  end;
  
  strDeger := Reg.ReadString( 'NameServer' ); // REG_SZ
  if Pos(',', strDeger) > 0 then
  begin
    Result.DNS1 := Copy(strDeger, 1, Pos(',', strDeger)-1);
    System.Delete(strDeger, 1, Pos(',', strDeger) );
    Result.DNS2 := Trim( strDeger );
  end;
  
  Reg.Free;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Label1.Enabled := NOT CheckBox1.Checked;
  Label2.Enabled := NOT CheckBox1.Checked;
  Edit1.Enabled  := NOT CheckBox1.Checked;
  Edit2.Enabled  := NOT CheckBox1.Checked;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
Var
  strNetCfgInstanceId : String;
  Bilgiler : tIPBilgileri;
begin
  if TComboBox(Sender).ItemIndex >= 0 then
  begin
    strNetCfgInstanceId := TComboBox(Sender).Items[TComboBox(Sender).ItemIndex];
    System.Delete( strNetCfgInstanceId, 1, Pos('" :', strNetCfgInstanceId) + 3 );
    Bilgiler   := IpBilgileriAl( strNetCfgInstanceId );
    Edit1.Text := Bilgiler.IPAddress;
    Edit2.Text := Bilgiler.SubnetMask;
    Edit3.Text := Bilgiler.DNS1;
    Edit4.Text := Bilgiler.DNS2;
    CheckBox1.Checked := Bilgiler.OtomatikIP;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Style := csDropDownList;
  ComboBox1.Items.Clear;
  // Bizim Network kart(lar)ı tespit Procedure
  ListeIcineNICveGUID( ComboBox1.Items );
  if ComboBox1.Items.Count > 0 then ComboBox1.ItemIndex := 0;
  ComboBox1Change(ComboBox1);
end;
Resim
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

varsayılan ağ geçidi yok ?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

Sana kodlara bak dedim. Sana sipariş kod mu yazıyorum. O zaman nerede trak orada bırak. :roll:
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

mrmarman walla gözümü öle korkuttunki psikolojim bozuldu sen bana birde şunu şöyle yapacan bunu böyle yaapcan diyorsun bu kodları gördüm bunlar professional isi benim gibi acemiler bu kodu nasıl yapacak maşşalahı var fazlada kod sayısı bilmiyorum nasıl olacak
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

- Bir kaç mesaj önce önerdiğimi yap, bu Registry yazma işini önce bir rafa kaldır.

- Şimdi procedure / fonksiyon kavramlarını sindirmeye çalış. Değişkenler, veri tipleri, Windows formları, işletim sistemi çalışma mekanizması ... derken bir bakmışsın 3- 6 ay sonra kendini "registry bu muymuş, bu kadar basit miymiş" diyecek duruma gelmiş bulursun.

- Hemen şimdi değil ama zamanla INI dosyalarını çalışarak olaya girer ve devam edersin. INI dosyası da Registry işlemlerine benzer ama her şey fiziksel bir dosya üzerinde yürür. Temelden sağlam adımlarla başla. Yoksa hakikaten tükenmişlik yaşarsın.

- Yazılım işinden kimsenin soğumasını istemediğim için sabırla yazıyorum. Yoksa uzayan lafı kısa kesmek işin kolayına kaçmaktır.
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

dogru diyorsun bu ara göz lazeri olmak için doktora gittim göz yapısı uygun dedi lazerde olabilirim bir süre pc basında olmayacagım daha sonra tekrar bu işe devam edecegim seninde yardımlarınla inşallah üstesinden gelecegim lazer aradan çıkarayım
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

Geçmiş olsun. :wink:
Çalışmalarında da başarılar.
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

mrmarman rahatsız ediyorum kusura bakma ama ögrenmem için takılan kısımları sormam gerek aşagıdaki kodlarda geri değer döndürür olayınımı açıklıyor

procedure topla
Topla1( 10, 20, Sonuc );
ShowMessageFmt('%d', [Sonuc] );

FUNCTION topla
Sonuc := Topla2( 10, 20 );
ShowMessageFmt('%d', [Sonuc] );

PROCEDURE hazırlarken var kullanmak zorundamıyız yoksa aynısı FUNCTION var kullanabiliriz örnek olarak

FUNCTION
function Topla2( A, B: Integer ): Integer;

PROCEDURE
procedure Topla1( A, B:Integer; var C:Integer );
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

- Tabi her ikisinde de kullanabilirsin.

- Parametre verirken VAR kullanarak diyoruz ki; procedure veya function içinde VAR olan değişkene bir değer atadığında, function veya procedure işi bitip hayatını sona erdirdiğinde, VAR olan değişkene atanmış bir değer varsa, o değer olduğu gibi son hali olarak gerisin geriye okunabilsin demektir.
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

yani foksiyondada aşagıdaki gibi kullanabiliriz

FUNCTION
function Topla2( A, B:Integer; var C:Integer );

Procedure neden kullanmayız ?
Procedure ve Function diye iki kavram var diye bir soru sorabilirsin. Bu doğaldır. Cevabı ise basittir. Aşağıdaki şekilde sadece bir function'u kullanabiliriz. Procedure kullanamayız.

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ShowMessageFmt('%d', [ Topla2( 10, 20 ) ] );
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

pakv yazdı:yani foksiyondada aşagıdaki gibi kullanabiliriz

FUNCTION
function Topla2( A, B:Integer; var C:Integer );

Procedure neden kullanmayız ?
Procedure ve Function diye iki kavram var diye bir soru sorabilirsin. Bu doğaldır. Cevabı ise basittir. Aşağıdaki şekilde sadece bir function'u kullanabiliriz. Procedure kullanamayız.

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
ShowMessageFmt('%d', [ Topla2( 10, 20 ) ] );
end;
Function yazdığında sonuna bir adet dönüş değeri vermek zorunluluğun var. Dilersen kullanmayabilirsin ama mantığına uymaz, öyle lazım gelirse o zaman procedure kullanırısın function değil. Şöyle yapabilirdin.

Kod: Tümünü seç

function Topla2( A, B:Integer; var C:Integer ): Boolean;
begin
  C := A + B;
  if A > B
    then Result := True
    else Result := False;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : Integer;
begin
  if Topla2( 10, 20, Sonuc ) then
  begin
    ShowMessage('Toplam = ' + IntToStr(Sonuc) + ' ve Burada A, B den büyüktür..');
  end else
  begin
    ShowMessage('Toplam = ' + IntToStr(Sonuc) + ' ve Burada B, A dan büyüktür..');
  end;
end;
Resim
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

mrmarman burda kafam iyice karıştı

Function yazdığında sonuna bir adet dönüş değeri vermek zorunluluğun var. Dilersen kullanmayabilirsin ama mantığına uymaz, öyle lazım gelirse o zaman procedure kullanırısın function değil. Şöyle yapabilirdin.

Kod: Tümünü seç

function Topla2( A, B:Integer; var C:Integer ): Boolean;
begin
  C := A + B;
  if A > B
    then Result := True
    else Result := False;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : Integer;
begin
  if Topla2( 10, 20, Sonuc ) then
  begin
    ShowMessage('Toplam = ' + IntToStr(Sonuc) + ' ve Burada A, B den büyüktür..');
  end else
  begin
    ShowMessage('Toplam = ' + IntToStr(Sonuc) + ' ve Burada B, A dan büyüktür..');
  end;
end;
Resim[/quote]
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen mrmarman »

Geç oldu, çayım da bitti :D yarın İstanbul seyahatim var, hazırlıkları bitirip ayrılıcam.

Konu aslında zor değil.
(1) Function gidiş/dönüş bileti olan bir yolculuk, Procedure sadece tek gidiş bileti olan.
(2) Benzer olarak her ikisinde de parametre bazında çift yönlü iletim olan özel durum var.

işin özü bu.

Bu procedure ve function ortak olarak konumlanması açısından GLOBAL veya YEREL olabiliyor.

Bu kavramları kitaplardan okuyarak zaten çözebilirdin, buradan örneklerle ifade ettim. Geriye gidip mesajları okursan anlayacaksın. İyi bir Delphi kitabı edin. Tavsiye veremiyorum, çünkü neyi nasıl anlayabileceğini bilemem. Onun için kitapçıya gidip bir kaç tanesinin kapağını açıp oku. Sana hitap edeni satın al.
Resim
Resim ....Resim
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

lazer ameliyatı da biraz kafamı kurcalıyor tam odaklanmıyorum ameliyat için kesin karar verirsem bir süre pc başına oturamayacam iyileşme süreci bitsin bu yazılım işine tam asılacam senin destegin sayesinde bu işi kavrayacam inşallah hayırlı yolculuklar :)
kaan_karabey
Üye
Mesajlar: 107
Kayıt: 01 May 2013 05:30

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen kaan_karabey »

mrmarman yazdı:- Önce okuma işi bitsin, yazma ondan sonra gelecek... :D

- Yazma kısmını silerek sadece okuma kısmını bir proje haline getirdim. Bu linkten indirip denersin.

- Bu kodları sindirmen zaman alacak. :idea:

Kaynak Kodu :

Kod: Tümünü seç

Uses Registry;

Procedure ListeIcineNICveGUID( Bilgiler:TStrings );
Const
  NetworkKEY = '\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}';
Var
  Reg    : TRegistry;
  strKey,
  strDriverDesc,
  strNetCfgInstanceId : String;
  Liste  : TStringList;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKeyReadonly( NetworkKEY ) then
  begin
    Liste := TStringList.Create;
    Reg.GetKeyNames( Liste );
    while Liste.Count > 0 do
    begin
      // Tekrar bir önceki, üst ağaç dalına dönüyoruz...
      Reg.OpenKeyReadonly( NetworkKEY );
      strKey := Liste[0];
      if Reg.KeyExists(strKey) then
      begin
        Reg.OpenKeyReadOnly( strKey );
        strDriverDesc       := Reg.ReadString('DriverDesc');
        strNetCfgInstanceId := Reg.ReadString('NetCfgInstanceId');
        if ( Pos( 'ETHERNET', UpperCase(strDriverDesc) ) > 0 )
        or ( Pos( 'LAN',      UpperCase(strDriverDesc) ) > 0 )
        or ( Pos( 'NIC',      UpperCase(strDriverDesc) ) > 0 )
        then Bilgiler.Add( Format('"%s" : %s', [strDriverDesc, strNetCfgInstanceId]) );
      end;
      Liste.Delete(0);
    end;
    Liste.Free;
  end;
  Reg.Free;
end;

Type tIPBilgileri = Record
  OtomatikIP       : Boolean;
  DhcpIPAddress,
  DhcpNameServer,
  DhcpServer,
  DhcpSubnetMask,
  DhcpDefaultGateway,
  IPAddress,
  SubnetMask,
  DNS1, DNS2       : String;
end;

Function IpBilgileriAl( NetCfgInstanceId: String ):tIPBilgileri;
Const
  AyarlarKEY = '\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces';
Var
  Reg       : TRegistry;
  strDeger  : String;
  DataType,
  DataSize  : Cardinal;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKeyReadonly( AyarlarKEY + '\' + NetCfgInstanceId );

  Result.DhcpIPAddress  := Reg.ReadString('DhcpIPAddress');  // REG_SZ
  Result.DhcpNameServer := Reg.ReadString('DhcpNameServer'); // REG_SZ
  Result.DhcpServer     := Reg.ReadString('DhcpServer');     // REG_SZ
  Result.DhcpSubnetMask := Reg.ReadString('DhcpSubnetMask'); // REG_SZ

  if Reg.ReadInteger('EnableDHCP' ) = 1                      // REG_DWORD
    then Result.OtomatikIP := True
    else Result.OtomatikIP := False;

  if Reg.ValueExists('DhcpDefaultGateway') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('DhcpDefaultGateway'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('DhcpDefaultGateway'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.DhcpDefaultGateway := strDeger;
  end;

  if Reg.ValueExists('IPAddress') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('IPAddress'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('IPAddress'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.IPAddress := strDeger;
  end;

  if Reg.ValueExists('SubnetMask') then // REG_MULTI_SZ
  begin
    RegQueryValueEx( Reg.CurrentKey, PChar('SubnetMask'), nil, @DataType, nil, @DataSize);
    SetLength(strDeger, DataSize - 1);
    if 0 = RegQueryValueEx( Reg.CurrentKey, PChar('SubnetMask'), nil, @DataType, PByte(strDeger), @DataSize)
    then Result.SubnetMask := strDeger;
  end;
  
  strDeger := Reg.ReadString( 'NameServer' ); // REG_SZ
  if Pos(',', strDeger) > 0 then
  begin
    Result.DNS1 := Copy(strDeger, 1, Pos(',', strDeger)-1);
    System.Delete(strDeger, 1, Pos(',', strDeger) );
    Result.DNS2 := Trim( strDeger );
  end;
  
  Reg.Free;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Label1.Enabled := NOT CheckBox1.Checked;
  Label2.Enabled := NOT CheckBox1.Checked;
  Edit1.Enabled  := NOT CheckBox1.Checked;
  Edit2.Enabled  := NOT CheckBox1.Checked;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
Var
  strNetCfgInstanceId : String;
  Bilgiler : tIPBilgileri;
begin
  if TComboBox(Sender).ItemIndex >= 0 then
  begin
    strNetCfgInstanceId := TComboBox(Sender).Items[TComboBox(Sender).ItemIndex];
    System.Delete( strNetCfgInstanceId, 1, Pos('" :', strNetCfgInstanceId) + 3 );
    Bilgiler   := IpBilgileriAl( strNetCfgInstanceId );
    Edit1.Text := Bilgiler.IPAddress;
    Edit2.Text := Bilgiler.SubnetMask;
    Edit3.Text := Bilgiler.DNS1;
    Edit4.Text := Bilgiler.DNS2;
    CheckBox1.Checked := Bilgiler.OtomatikIP;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Style := csDropDownList;
  ComboBox1.Items.Clear;
  // Bizim Network kart(lar)ı tespit Procedure
  ListeIcineNICveGUID( ComboBox1.Items );
  if ComboBox1.Items.Count > 0 then ComboBox1.ItemIndex := 0;
  ComboBox1Change(ComboBox1);
end;
Resim


Burda mainform on taskbar hatası veriyor Bunu nasıl çözecem????
Sevgiler Yalan Olmuş Yalan Sahtekar Bırakıpta Bir Gün Seni Gitmeyecek Mi?
Cevapla