![]() |
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; |
Re: fest eingestellte IP-Adressen mittels Programm ändern
Hallo Kara,
Zitat:
Zitat:
Wenn du die IP-Adresse eines Windows PC per Programm ändern möchtest, dann ist vielleicht dieser thread für dich von Interesse: ![]() Andernfalls solltest du mehr Informationen geben. Grüße vom marabu |
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:
Vielleicht hilft das eher? Ich blick nicht durch, was da eigentlich abläuft :shock:
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; |
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.
|
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. |
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 |
Re: fest eingestellte IP-Adressen mittels Programm ändern
Zitat:
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
|
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 |
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 |
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) |
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 |
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?) |
Re: fest eingestellte IP-Adressen mittels Programm ändern
Ich hätte ja WMI (
![]() netsh kannst du ja nur über ShellExecute oder so einbinden ... vielleicht besser noch CreateProcess() oder ShellExecuteEx() um auf das Ende des Prozesses zu warten ... |
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. |
Re: fest eingestellte IP-Adressen mittels Programm ändern
Zitat:
Zitat:
![]() Innerhalb eines TForm-Derivats nimmst du dann folgendes:
Delphi-Quellcode:
Diese Routine wartet, daß der Kindprozeß sich beendet hat, oder wartet nicht, wenn der letzte Parameter False ist.
ShellExecuteAndWaitA(Self.Handle, 'open', 'C:\WINNT\System32\netsh.exe', '<Parameter hier>', '<Arbeitsverzeichnis oder Nil>', SW_HIDE, True);
|
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