![]() |
Ip aus Registry auslesen.
Hallo Delphipraxis,
ich habe ein Programm zum auslesen meiner ip aus der Registry geschrieben. Dabei wird die ip letztenendes folgendermassen aus einem Reg-schlüssel gelesen:
Code:
Nun weiss ich auch, dass dieser Schlüssel existiert, und ich weiss auch, dass da meine ip-Addresse drinsteht, aber wenn ich den Buffer3 folgendermassen ausgebe:
Reg.ReadBinaryData('IpAddress', Puffer, PuffSize);
Code:
dann passiert nichts weiter, als dass
Memo1.Lines.Add(Puffer);
0.0.0.0 ausgegeben wird. Was mache ich falsch? Puffer ist übrigends folgendermassen definiert:
Code:
Ok, ich hoffe mal, dass das genug informationen sind um das Problem zu schildern.
Puffer: array [1..32] of Char;
Gruss Jan[/code] |
alarm zurück, der wert wurde einfach immer nur überschrieben.
BB! Jan |
Hallo nochmal,
jetzt ist der thread wenigstens nicht umsonst denn ich hab ein weiteres Problem zu diesem Puffer: Zu Anfang funktionierte das Lesen des Ip-wertes aus der registry ohne Probleme, doch dann hab ich da etwas dran herumgebastelt, d.h. ich habe alles in eine for-Schleige gehängt an einer anderen Stelle ausgegeben, und komischer Weise bekommen ich jetzt eine exception, die mir sagt, dass 'IPAddress' vom falschen Typ ist, aber von den oben genannten Deklarationen bin ich kein Stück abgewichen. Weiss da jemand woran das liegen kann, dass von minimalen code-Änderungen, wie z.b. das Hinzufügen einer Ausgabe des Puffers durch showmessage(); auf einmal der Datentyp des Registry-schlüssels verändert werden soll? Danke für alle Antworten. Gruß Jan |
Warum eigentlich: Registry?
Es gibt eine passende WinSock-Funktion (muss ich mal rauskramen, wenn sie keiner zur Hand hat), die alle benutzten IPs auflistet. Also, die vom LAN, wenn du online bist dann auch die vom Web-Provider, usw. |
Hallo MathiasSimmack,
das ist mir schon bewusst, ich kenne auch genau diesen thread hier aus der DP, aber wenn man den Kram aus der reg ausliest, dann geht man das ganze einfach mal von einer anderen seite an, eben mit registry. Deswegen würde ich das gerne wissen. BB! Jan |
Moin Jan,
mal ganz allgemein gesagt: Das direkte Auslesen aus der Registry sollte man, möglichst, nur dann wählen, wenn es entweder der dokumentierte Weg ist, oder es wirklich keinen anderen Weg gibt. Gerade die TCP/IP Parameter habe seit Windows 2000 ihre Position geändert, so dass ein Programm, das unter 9x/ME/NT4 noch einwandfrei lief, unter 2000/XP wohl Fehler produzieren dürfte. |
Hallo Christian,
Also der Code funktioniert unter xp und 2k, und es ist mir schon klar, dass es nicht immer sehr schlau ist aus der Registry auszulesen, da diese variabel ist, allerdings geht es mir ja auch garnicht wirklich um die ip, weil ich das auch anders machen kann, aber es wurmt mich, dass eine zuordnung zu einer variable von jetzt auf gleich einfach nichtmehr funktioniert, obwohl nur minimale änderungen an belanglosen stellen vorgenommen wurden, und das würde ich halt gerne für spätere Zeiten vermeiden lernen. Gruß Jan |
Moin Jan,
manchmal kann es daran liegen, dass Du versuchst einen Datentyp auszulesen, den der entsprechende Wert nicht hat. Daher kann es durchaus sinnvoll sein vorher mit GetDataType zu ermitteln, welchen Typ ein Wert hat. Ich weiss leider nicht mehr an welcher Stelle, und in welchem Zusammenhang das war, aber ich hatte schon mal den Fall, dass ein Wert den Typ gewechselt hat. [EDIT] Manchmal kann ein Wert auch nicht mehr vom System genutzt werden, wenn man ihn mit dem falschen Typ schreibt. [/EDIT] |
Hallo Christian,
da ich weder in die registry geschrieben habe, und sich der Wert auch nicht komplett geändert haben kann, verstehe ich nicht wie das so sein kann, ich habe lediglich ans Ende einer Prozedur versucht den Buffer auszugeben, und schon war der Typ des Buffers an der codestelle, wo er gelesen werden sollte, falsch, aber wenn ich die Ausgabe wieder gelöscht habe, klappte alles hervorragend, jetzt habe ich aber das Programm so umstrukturiert, dass es mir nicht genügt eine Ausgabe zu löschen, sondern ich will dieses Problem beseitigen. Es geht bei dem Code wieder um einen Code vom Swissdelphicenter, der allerdings nicht funktionierte. Nachdem ich ihn umgeschrieben habe, so dass er mir nurnoch eine einzige ip, statt allen ausgibt, funktionierte er, nur dass dann zum Schluss besagter Fehler eintrat. Logischerweise finde ich das **** und das soll weg :] Gruß Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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