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.
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

slm kardeş nasılsın verdigin kodlar için tşk ederim bu arada etherneti wmi ler ile okuttum edit attım problemsiz okuyor herşey yolunda çalışıyor yalnız kodlarda kafama takılan bir yer var aşagıda buton kontrolünde sıfırdan yaptıgımda projeyi senin buton prosüdürün benima rasında sadece isim degişikligi var derle digim zaman butona bastıgım ipleri eklemiyor aşagıda örnek oalrak anlatacam
aşagıdaki kodlarda senin verdigini sıfırdan yaptıgımda sadece isim degiştirdim sen name lerine cbDHCP.Checked bende checbox1.Checked orjinal olarak ekledim prosüdürde aynısını yaptım delphi derledi çalıştırdı ama ip leri eklemedi wmi kodları yukarıdaki foksiyonlar aynı birebir aşagıdaki kısmı anlayamadım

SimaWB kodları

procedure TForm10.Button1Click(Sender: TObject);
begin
if cbDHCP.Checked then
SetIpConfig('')
else
SetIpConfig(edtIPAdres.Text, edtGateway.Text, edtSubnet.Text);
ShowMessage('IP Adresi değişti');
end;
-------------------------------------------------------------------------------------------------------------
pakv komutları
procedure TForm1.Button1Click(Sender: TObject);

begin

if checbox1.Checked then
SetIpConfig('')
else
SetIpConfig(edit1.Text, edit2.Text, edit3.Text);
ShowMessage('IP Adresi değişti');
end;
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

SimaWB kodları gödneriyom sorun nedir anyamadım aynı kodlar senin hazırladıgın örnekte çalışıyor birebir aynı sen edit dnsedt olarak girmişsin bende o hangi edit ise edit2.text oalrka girdim farklı bişeler yapmadım kodların aynısı wmi ekledim senin örnekte çalıştı ama sıfırdan projedede ip degiştirmiyor delphi hatada vermedi yardımcı olaiblirmisin kodlar aşagıda

unit ip;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,magwmi;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
CheckBox1: TCheckBox;
ComboBox1: TComboBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses ComObj, ActiveX, UrlMon;

{$R *.dfm}
function SetIpConfig(const AIpAddress : string;
const AGateWay : string = '';
const ASubnetMask : string = '') : integer;
var Retvar : integer;
oBindObj : IDispatch;
oNetAdapters,oNetAdapter,
oIpAddress,oGateWay,
oWMIService,oSubnetMask : OleVariant;
i,iValue : longword;
oEnum : IEnumvariant;
oCtx : IBindCtx;
oMk : IMoniker;
sFileObj : widestring;
begin
Retvar := 0;
sFileObj := 'winmgmts:\\.\root\cimv2';

// Create OLE [IN} Parameters
oIpAddress := VarArrayCreate([1,1],varOleStr);
oIpAddress[1] := AIpAddress;
oGateWay := VarArrayCreate([1,1],varOleStr);
oGateWay[1] := AGateWay;
oSubnetMask := VarArrayCreate([1,1],varOleStr);
if ASubnetMask = '' then
oSubnetMask[1] := '255.255.255.0'
else
oSubnetMask[1] := ASubnetMask;

// Connect to WMI - Emulate API GetObject()
OleCheck(CreateBindCtx(0,oCtx));
OleCheck(MkParseDisplayNameEx(oCtx,PWideChar(sFileObj),i,oMk));
OleCheck(oMk.BindToObject(oCtx,nil,IUnknown,oBindObj));
oWMIService := oBindObj;

oNetAdapters := oWMIService.ExecQuery('Select * from ' +
'Win32_NetworkAdapterConfiguration ' +
'where IPEnabled=TRUE');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;

while oEnum.Next(1,oNetAdapter,iValue) = 0 do begin
try
// Set by DHCP ? (Gateway and Subnet ignored)
if (AIpAddress = '') or SameText(AIpAddress,'DHCP') then
Retvar := oNetAdapter.EnableDHCP
// Set via STATIC ?
else begin
Retvar := oNetAdapter.EnableStatic(oIpAddress,oSubnetMask);
// Change Gateway ?
if (Retvar = 0) and (AGateWay <> '') then
Retvar := oNetAdapter.SetGateways(oGateway);

// *** This is where we need some sort of ***
// *** Network Mapped Resource Refresh ***
end;
except
Retvar := -1;
end;

oNetAdapter := Unassigned;
end;

oGateWay := Unassigned;
oSubnetMask := Unassigned;
oIpAddress := Unassigned;
oNetAdapters := Unassigned;
oWMIService := Unassigned;
Result := Retvar;
end;

function SetDnsServers(const APrimaryDNS : string;
const AAlternateDNS : string = '') : integer;
var Retvar : integer;
oBindObj : IDispatch;
oNetAdapters,oNetAdapter,
oDnsAddr,oWMIService : OleVariant;
i,iValue,iSize : longword;
oEnum : IEnumvariant;
oCtx : IBindCtx;
oMk : IMoniker;
sFileObj : widestring;
begin
Retvar := 0;
sFileObj := 'winmgmts:\\.\root\cimv2';
iSize := 0;
if APrimaryDNS <> '' then inc(iSize);
if AAlternateDNS <> '' then inc(iSize);

// Create OLE [IN} Parameters
if iSize > 0 then begin
oDnsAddr := VarArrayCreate([1,iSize],varOleStr);
oDnsAddr[1] := APrimaryDNS;
if iSize > 1 then oDnsAddr[2] := AAlternateDNS;
end;

// Connect to WMI - Emulate API GetObject()
OleCheck(CreateBindCtx(0,oCtx));
OleCheck(MkParseDisplayNameEx(oCtx,PWideChar(sFileObj),i,oMk));
OleCheck(oMk.BindToObject(oCtx,nil,IUnknown,oBindObj));
oWMIService := oBindObj;

oNetAdapters := oWMIService.ExecQuery('Select * from ' +
'Win32_NetworkAdapterConfiguration ' +
'where IPEnabled=TRUE');
oEnum := IUnknown(oNetAdapters._NewEnum) as IEnumVariant;

while oEnum.Next(1,oNetAdapter,iValue) = 0 do begin
try
if iSize > 0 then
Retvar := oNetAdapter.SetDNSServerSearchOrder(oDnsAddr)
else
Retvar := oNetAdapter.SetDNSServerSearchOrder();
except
Retvar := -1;
end;

oNetAdapter := Unassigned;
end;

oDnsAddr := Unassigned;
oNetAdapters := Unassigned;
oWMIService := Unassigned;
Result := Retvar;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckBox1.Checked then
SetIpConfig('')
else
SetIpConfig(edit1.Text, edit2.Text, edit3.Text);
ShowMessage('IP Adresi değişti');
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
SetDnsServers(edit4.Text, edit5.Text);
ShowMessage('DNSler değiştirildi.');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
SetDnsServers('');
ShowMessage('DNS adresi otomatik olarak alınacak.');
end;

end.
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen SimaWB »

Düzgün çalışmadığını düşündüğün kısımlara Breakpoint koyarak programı Debug modda çalıştırıp kontrol edebilirsin. Mesela Button1Click içine Breakpoint koyup F7 ile satır satır gitmeyi denedin mi?
There's no place like 127.0.0.1
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 »

mrmarman yazdı:- @SimaWeb'inkini yapamıyorsan o zaman Registry'e dönüp GUID'lerin listesini alıp, onların altında sıra ile anahtarları açıp arayacak bir çözüm üreteceksin.
+1 daha altını çizeyim.

- Bir de yol göstereyim.

(1) HKEY_LOCAL_MACHINE root'undan araştırmanı sıralı olarak yapacaksın.
(2) ilk olarak "\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" keyini açacaksın
(3) Buradaki anahtaları önce bir listeye alacaksın.
(4) Listeye aldığın anahtarları baştan sona bir döngü ile gezecek, "DriverDesc" ile yazan yerde "Ethernet", "LAN" veya "NIC" olanların hangilerini olduğuna bakacaksın.
(5) Bu verdiğim üç anahtar kelimeye sahip "DriverDesc" varsa o anahtarın altındaki "NetCfgInstanceId" değerini okuyacaksın. İşte senin sürekli değişiyor dediğin GUID kodu budur. Yani ilgili Ağ kartının tanımlayıcısı budur.
(6) Ancak bu aşamadan sonra "\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces" altında bu GUID kodu arayıp onun altında istediğini yapabilirsiniz. :idea:

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 bunu Interfaces altındaki okudum hatta regeditten ethernet kartını bile okudum combobox attım ama okudugum degere nasıl yazacagımı yapamadım
pakv
Üye
Mesajlar: 65
Kayıt: 05 Haz 2013 08:59

Re: delphi Dns ve İp adresleri girme

Mesaj gönderen pakv »

SimaWB kardeşim program hiç çalışmıyor exe delphi derliyor lakin butona basılınca sanki butonun procudürüne kod yazılmamış gibi bunu anyamadı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 »

Konu basit bir TRegistry operasyonu.

Okuduğun ve yazmaya çalışıp yazamadığın kod nedir ? Registry tiplerini inceledin mi ?
(1) REG_SZ olanlara string olarak yazabilirsin.
(2) REG_SZ_MULTI olanlara direkt string olarak yazamazsın, onun yerine okumak için RegQueryValueEx() yazmak için de RegSetValueEx() fonksiyonlarını kullanırsın.
(3) REG_SZ_MULTI Yazacağın değerler, birden fazla sayıda string ifade olabildiğinden, her değerin arasına #0 eklemelisin. :idea:
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 »

SimaWB söyledigini yaptım printscrren yaptım seninle paylaşıyorum

Resim
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 »

iyi de ben ne diyorum sen ne diyorsun...
pakv yazdı:mrmarman bunu Interfaces altındaki okudum hatta regeditten ethernet kartını bile okudum combobox attım ama okudugum degere nasıl yazacagımı yapamadım
- Ben bunun üzerine cevap yazıyorum.
- Hazır blok kod kullandığın sürece hatanın çözümü bulsan bile sana faydası olmaz, günü kurtarır sadece..
- Dikkat edersen kod vermiyorum. Aslında senin yaptığını iddia ettiğin registry okuma işlemine bir vizyon getiriyorum o kadar.
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 söylediklerindne hiç bişe anlamadım wmi foksiyon kısmı zaten hazır diger kısmı ben düzenledim ve hataya rastlamadım herşey dogru ama neden çalışmadıgını anlayamadı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 »

Merhaba.

- Ben de anlamadığını anladığım için iki kere yazdım. Ben TRegistry olayını yazıyorum. Hani en başta yapmaya çalıştığın ama takıldığın için başaramadığından WMI scripting konusuna geçtiğin konu.

- WMI üzerine hiç birşey yazmıyorum. O konu @SimaWEB ile arandaki bir konu ki WMI Script olayı başka bir dünya. "Sadece bir iş için kullanırım, bundan başka yüzüne bile bakmayacağım" diyeceğin bir konu olmamalı diye değerlendirdiğim bir konudur.

- Madem takıldın, tecrübeni arttırmak için yeni baştan bir proje açar ve orada aynı şeyi uygulamaya çalışırsın. :idea:
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 kardeşim peki takıldıgımda bana yardımcı olabilecekmisin ben seni ekledim bana destek verebilirmisin regedit bazı ufak tefek şeyler yaptım delphide ama senin yukarıdaki anlattıgın kısmı kitaplarda göremedim için o kısımlar hakkında pek bilgim 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 »

Takıldığın yer neresi. "IP değiştirmeyi yapamadım" demeyi şahsen kabul etmiyorum. Bana şunu şöyle okudum. Oradaki IP'yi değiştiremedim gibi kodlarla göster ki hazır kod istemediğini kabul edeyim.
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 »

açık konuşmak gerekirse hazır kod istemiyorum ama sen yukarıda bana guıd nasıl bulacagımı yazmışsın regedit te delphi de nasıl yapılacagını pek anlamadım NetCfgInstanceId" ulaştım hazır kod istemiyorum sadece basit bir örnek kod lazım yazılım işi örnek kodlarla geliştirilir ögrenilir ...
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 »

Hazır kod istemiyorum diyorsun ama yine hazır kod istiyorsun...

(1) NetCfgInstanceId'yi buldun, sonra ne yaptın ?
(2) Nereye hangi anahtara ulaşmak için bu NetCfgInstanceId kodunu kullandın ? Ulaşabildiğini veya ulaşamadığını nereden anlıyorsun ?
(3) Oradan bir değer okudunsa oraya yazmak için hangi kodu yazdın.


- Bunları bize kod ile göster ki, kodlarındaki hatayı sana izah edelim.
Resim
Resim ....Resim
Cevapla