Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi fest eingestellte IP-Adressen mittels Programm ändern (https://www.delphipraxis.net/51683-fest-eingestellte-ip-adressen-mittels-programm-aendern.html)

Kara 17. Aug 2005 08:08


fest eingestellte IP-Adressen mittels Programm ändern
 
Ich hab mal wieder ein IP-Problem. :P
Ist es möglich, eine fest eingestellte IP-Adresse mittels Delphi-Programm zu ändern?
Ich hab hier ein Programm, das das eigentlich tun sollte, es funktioniert aber nicht.
Ich kann verschiedene IPs eingeben, das System startet neu, aber es ändert sich nichts.
(Habe die automatische Zuweisung durch den DHCP ausgeschalten)

Das Programm ist nicht von mir, darum kann ich nur mutmaßen, was für den Eintrag gedacht ist.
Vielleicht dies hier:
Delphi-Quellcode:
begin
           MAC_CRS:=CMac + IdentPunkt;
           TSAP_SPS:=IdentPunkt + '_CRS';
           TSAP_CRS:='CRS_' + IdentPunkt;
           Ini.WriteString('IP', 'IP_SPS',IP_SPS);
           Ini.WriteString('IP', 'IP_CRS',IP_CRS);
           Ini.WriteString('IP', 'Subnet',Subnet_CRS);
           Ini.WriteString('IP', 'Gateway',Gateway_CRS);
           Ini.WriteString('Identpunkt', 'Identpunkt',IdentPunkt);
           Ini.WriteString('Ethernet', 'MAC_SPS',MAC_SPS);
           Ini.WriteString('Ethernet', 'MAC_CRS',MAC_CRS);
           Ini.WriteString('Ethernet', 'TSAP_SPS',TSAP_SPS);
           Ini.WriteString('Ethernet', 'TSAP_CRS',TSAP_CRS);
           Ini.WriteString('Kamera', 'Trigger',Trigger);
           if IP_CRS <> '' then
           begin
              registryEintrag;
              reeboot;
              halt;
           end;
         end
         else
         begin
           IP_SPS:=Ini.ReadString('IP', 'IP_SPS',IP_SPS);
           IP_CRS:=Ini.ReadString('IP', 'IP_CRS',IP_CRS);
           Subnet_CRS:=Ini.ReadString('IP', 'Subnet',Subnet_CRS);
           Gateway_CRS:=Ini.ReadString('IP', 'Gateway',Gateway_CRS);
           MAC_SPS:=Ini.ReadString('Ethernet', 'MAC_SPS',MAC_SPS);
           MAC_CRS:=Ini.ReadString('Ethernet', 'MAC_CRS',MAC_CRS);
           TSAP_SPS:=Ini.ReadString('Ethernet', 'TSAP_SPS',TSAP_SPS);
           TSAP_CRS:=Ini.ReadString('Ethernet', 'TSAP_CRS',TSAP_CRS);
           Trigger:=Ini.ReadString('Kamera', 'Trigger',Trigger);
           NurTNR:=Ini.ReadString('Modus', 'NurTNR',NurTNR);
         end;

marabu 17. Aug 2005 08:43

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Hallo Kara,

Zitat:

Zitat von Kara
Ist es möglich, eine fest eingestellte IP-Adresse mittels Delphi-Programm zu ändern?

Das kommt darauf an, wie fest sie eingestellt ist. Wenn sie hardwaremäßig (in einem ROM oder EPROM) festgelegt ist, dann eher nicht...

Zitat:

Zitat von Kara
Ich hab hier ein Programm, das das eigentlich tun sollte, es funktioniert aber nicht.

Ich kann mich täuschen, aber der von dir gezeigte Programmausschnitt scheint mir nichts mit dem Windows TCP/IP Stack zu machen.

Wenn du die IP-Adresse eines Windows PC per Programm ändern möchtest, dann ist vielleicht dieser thread für dich von Interesse: klick

Andernfalls solltest du mehr Informationen geben.

Grüße vom marabu

Kara 17. Aug 2005 09:11

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Ah, ja, das hilft mir weiter. Danke!

Das wird aber ein ganzes Stück Arbeit, das unter zu bringen.

Ich habe festgestellt, dass mein Vorgänger die IP-Adresse in die Registry schreibt. Dort ändern sich die IPs auch. Hilft das denn was?
"set address..." oder netsh hab ich nirgends gefunden.

Mit fehlt etwas das Verständnis dafür, dass er das gemacht hat.
Das Programm war ursprünglich für Win NT gedacht und wird jetzt unter XP genutzt. Aber das sollte eigentlicht nicht ausschlaggebend sein, oder?

Delphi-Quellcode:
procedure TFormMain.registryEintrag;
var
  regist:TRegistry;
  Schluessel:String;
  Schluessel1:String;
  Schluessel2:String;
  i:integer;
  ip:string;
  x:integer;
  card:string;
begin
  if IP_CRS <>'' then
  begin
     regist:=TRegistry.Create;
    try
       card:=wertAusRegistryHolen('ServiceName','SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\NetworkCards\1');
       regist.rootkey:=HKEY_LOCAL_MACHINE;
       Schluessel1:='SYSTEM\CurrentControlSet\Services';
       Schluessel2:='\Parameters\Tcpip';
       Schluessel:=Schluessel1 + '\' + card + Schluessel2;
       if not regist.KeyExists(Schluessel) then
       begin
         Schluessel:=Schluessel1 + '\N1001' + Schluessel2;
         if not regist.KeyExists(Schluessel) then
         begin
           Schluessel:=Schluessel1 + '\E100B' + Schluessel2;
           if not regist.KeyExists(Schluessel) then
           begin
              Schluessel:=Schluessel1 + '\E100B1' + Schluessel2;
              if not regist.KeyExists(Schluessel) then
              begin
                 Schluessel:=Schluessel1 + '\Elnk31' + Schluessel2;
                 if not regist.KeyExists(Schluessel) then
                 begin
                    Schluessel:=Schluessel1 + '\Elnk32' + Schluessel2;
                    if not regist.KeyExists(Schluessel) then
                    begin
                       Showmessage('Achtung Fehlender Schlüssel in Registry!');
                       exit;
                    end;
                 end;
              end;
           end;
         end;
       end;
       wertInRegistryEintragen(IP_CRS,Schluessel,'IPAddress',REG_MULTI_SZ);
       wertInRegistryEintragen('255.255.255.' + Subnet_CRS,Schluessel,'SubnetMask',REG_MULTI_SZ);
       ip:='';
       x:=0;
       for i := 1 to length(IP_CRS) do
       begin
         if copy(IP_CRS,i,1)[1]='.' then
           inc(x);
         if x < 3 then
           ip:=ip+copy(IP_CRS,i,1)[1];
       end;
       ip:=ip + '.' + Gateway_CRS;
       wertInRegistryEintragen(ip,Schluessel,'DefaultGateway',REG_MULTI_SZ);
    finally
       regist.free;
    end;
  end;
end;
Vielleicht hilft das eher? Ich blick nicht durch, was da eigentlich abläuft :shock:

faux 17. Aug 2005 09:14

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Ja, daran hab ich auch schon gedacht, aber dann musst du IMHO wohl oder übel einen Neustart machen.

Kara 17. Aug 2005 09:22

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Das tu ich :lol:
Die Werte werden in der Registry auch übernommen. Aber auf die Netzwerkeinstellungen hat das keinerlei Einfluss.

marabu 17. Aug 2005 09:43

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Hallo Kara,

auf welchen Windows-Versionen soll denn das Programm laufen?
Arbeitest du wirklich mit Delphi 2?
Kannst du NETSH in einem Konsolfenster starten?

marabu

faux 17. Aug 2005 09:47

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Zitat:

Zitat von Kara
Die Werte werden in der Registry auch übernommen. Aber auf die Netzwerkeinstellungen hat das keinerlei Einfluss.

LOL...

Und dass du die Falsche Karte erwischt hast? Also der Letzte Schlüssel lautet ja 1. Vielleicht gibz die Karte net.. :S

Hab hier noch was gefunden bei mir in der Registry (XP):
Code:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network

Kara 17. Aug 2005 09:51

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Marabu: Wie gesagt, das Programm wurde für NT geschrieben und soll jetzt unter XP laufen.
Ich arbeite tatsächlich unter Delphi 2. Meine Arbeitsstelle ist da nicht so... :mrgreen:

Wurde eventuell unter NT die Eintragung aus der Registry in die Netzwerkeinstellungen übernommen und unter XP nicht mehr?

Faux: :shock: Da werd ich glatt mal nachschauen

marabu 17. Aug 2005 11:31

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Kara,

ich habe leider keinen Zugriff auf D2 und kann mich auch nicht so gut daran erinnern, aber das angehängte Programm habe ich in D7 erstellt und es stellt die IP Adresse ohne API Aufrufe mit Hilfe von NETSH ein.

Vielleicht kannst du ja etwas davon verwenden, um den Direktzugriff auf die registry aus deinem Programm zu verbannen.

marabu

Kara 17. Aug 2005 11:41

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Ist es denn schlecht, dass das Prog in die Registry eingreift?
Ich hätte das einfach gelassen und zusätzlich die Änderung der Netzwerkeinstellung mit dazu.
(Schön muss es nicht sein)

marabu 17. Aug 2005 11:56

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Eingriffe in die Windows Registrier-Datenbank sind nicht schlecht per se, man sollte aber schon wissen, was man da macht. Deinen geerbten Code könnte ich nicht verwenden, bevor ich ihn nicht haarklein nachvollzogen habe. Da müsste ich wahrscheinlich jede Menge Doku lesen. Da nehme ich lieber NETSH, aber wenn du dich besser auskennst, dann ist das ja kein Problem.

Warum willst du die Netzwerk-Konfiguration überhaupt mit Delphi machen? Kannst du es nicht gleich auf Betriebssystemebene erledigen? Muss denn die IP unbedingt im laufenden Betrieb umgestellt werden?

marabu

Kara 17. Aug 2005 12:14

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Ich will das nicht :|
Aber es soll so bleiben - aus Komfortgründen.

Ehrlich gesagt kann ich mit dem Großteil des Codes auch nichts anfangen. Ich kenn mich wahrscheinlich noch schlechter aus als du. Was ich bisher ändern musste, war nicht so wild, das waren fast nur reine Syntax- und ein paar Logik-Sachen.
Aber hier steh ich auf einer ganz anderen Ebene und bin ziemlich ratlos.

Ich denke, ich werde auch Netsh verwenden. Bleibt nur die Frage, wie ich das einbinden soll. Als procedure? (Und wo?)

Olli 17. Aug 2005 12:29

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Ich hätte ja WMI (MSDN-Library durchsuchenWin32_NetworkAdapterConfiguration) empfohlen, aber bei Delphi 2 bin ich dann etwas ratlos :roll: ...

netsh kannst du ja nur über ShellExecute oder so einbinden ... vielleicht besser noch CreateProcess() oder ShellExecuteEx() um auf das Ende des Prozesses zu warten ...

Kara 17. Aug 2005 12:56

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Das Ende welches Prozesses? Meines Programms oder der Änderung der IP?
Würdest du mir ein Beispiel schreiben? Nur 5 Zeilen mit Netsh drin? Wie ich die Zeile selber formulieren muss, geht ja recht deutlich aus der oben verlinkten Hilfe hervor. Aber in welchen Kontext ich das setzen muss, weiß ich nicht.

Olli 17. Aug 2005 13:16

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
Zitat:

Zitat von Kara
Das Ende welches Prozesses? Meines Programms oder der Änderung der IP?

Ende von NetSH, damit du vor dem nächsten NetSH-Befehl sicher sein kannst, daß der erste fertig ist.

Zitat:

Zitat von Kara
Würdest du mir ein Beispiel schreiben? Nur 5 Zeilen mit Netsh drin? Wie ich die Zeile selber formulieren muss, geht ja recht deutlich aus der oben verlinkten Hilfe hervor. Aber in welchen Kontext ich das setzen muss, weiß ich nicht.

Lade dir folgende Unit runter: http://assarbad.net/stuff/shellapiex.pas und binde sie ein ...

Innerhalb eines TForm-Derivats nimmst du dann folgendes:
Delphi-Quellcode:
ShellExecuteAndWaitA(Self.Handle, 'open', 'C:\WINNT\System32\netsh.exe', '<Parameter hier>', '<Arbeitsverzeichnis oder Nil>', SW_HIDE, True);
Diese Routine wartet, daß der Kindprozeß sich beendet hat, oder wartet nicht, wenn der letzte Parameter False ist.

Kara 17. Aug 2005 13:46

Re: fest eingestellte IP-Adressen mittels Programm ändern
 
So, ich hab jetzt halbwegs Marabus Demo durchblickt.
Vielleicht bekomm ich das hin. Und dann noch ShellExecuteEx o. ä.
:pale: Da steht mir noch was bevor...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz