![]() |
Namen der Netzwerk-Verbindungen auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe diesen ![]() Nur wie kann ich nun die Namen der Verbindungen auslesen? Bei mir heisst eine Verbindung "LAN-Verbindung" (siehe Bild) |
AW: Namen der Netzwerk-Verbindungen auslesen
Eigentlich genau gleich, wie du die MAC-Adresse gelesen hast.
Das Property heisst dann anstatt 'MACAdress' einfach 'Name'. Weitere interessante Properties sind
|
AW: Namen der Netzwerk-Verbindungen auslesen
Hallo,
Danke für die Liste! Wenn ich "Name" nutze, dann erhalte ich alles, nur nicht das was ich suche: Zitat:
|
AW: Namen der Netzwerk-Verbindungen auslesen
Ich weiss nicht genau was du suchst, aber NetConnectionID könnte es sein.
|
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
Sorry - hätt ich auch selbst draufkommen können - nur bei ID denk ich immer gleich an eine Integerzahl. |
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
Bzw. wo findet man eine Liste der möglichen Properties? |
AW: Namen der Netzwerk-Verbindungen auslesen
|
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
|
AW: Namen der Netzwerk-Verbindungen auslesen
Reicht dir das verlinkte "Example" nicht?
Und so schwer ist diese kleine API auch nicht zu verstehn. Man muß nur ein paar wenige Zeilen im MSDN nachlesen und schon kommt man z.B. auf Sowas:
Delphi-Quellcode:
var
Len: ULONG; AI, M: PIP_ADAPTER_INFO; Err: HRESULT; begin Len := 0; GetAdaptersInfo(nil, Len); GetMem(M, Len); try AI := M; Err := GetAdaptersInfo(AI, Len); if Err <> ERROR_SUCCESS then RaiseLastOSError(Err); while Assigned(AI) do begin ShowMessage(AI.Description + ' : ' + AI.IpAddressList.IpAddress.S); AI := AI.Next; end; finally FreeMem(M); end; end; |
AW: Namen der Netzwerk-Verbindungen auslesen
Hier wäre auch ein
![]() ![]() |
AW: Namen der Netzwerk-Verbindungen auslesen
Hier haben wir auch noch ein paar Beispiele zu den Funktionen aus der DP
![]() ![]() |
AW: Namen der Netzwerk-Verbindungen auslesen
Danke Danke Danke für die vielen Tips!
Irgendwie hab ich immer falsch gesucht (oder wie auch immer) Ich hab jetzt mal was zusammengebastelt:
Delphi-Quellcode:
Da les ich mir jetzt alles aus was GetAdaptersInfo zu bieten hat.
const
MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // arb. MAX_ADAPTER_NAME_LENGTH = 256; // arb. MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb. type PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING; IP_ADDRESS_STRING = packed record acString: array [1..16] of AnsiChar; end; PIP_MASK_STRING = ^IP_MASK_STRING; IP_MASK_STRING = IP_ADDRESS_STRING; PIP_ADDR_STRING = ^IP_ADDR_STRING; IP_ADDR_STRING = packed record Next : PIP_ADDR_STRING; IpAddress: IP_ADDRESS_STRING; IpMask : IP_MASK_STRING; Context : DWORD; end; time_t = int64; PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO; IP_ADAPTER_INFO = packed record Next : PIP_ADAPTER_INFO; ComboIndex : DWORD; AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH + 4] of AnsiChar ; Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of AnsiChar; AddressLength : UINT; Address : array [1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte; Index : DWORD; dwType : UINT; DhcpEnabled : UINT; CurrentIpAddress : PIP_ADDR_STRING; IpAddressList : IP_ADDR_STRING; GatewayList : IP_ADDR_STRING; DhcpServer : IP_ADDR_STRING; HaveWins : Boolean; PrimaryWinsServer : IP_ADDR_STRING; SecondaryWinsServer : IP_ADDR_STRING; LeaseObtained : time_t; LeaseExpires : time_t; end; function GetAdaptersInfo(const pAdapterInfo: PIP_ADAPTER_INFO; const pOutBufLen: PULONG): DWORD; stdcall; external 'IPHLPAPI.DLL' name 'GetAdaptersInfo'; //http://msdn.microsoft.com/en-us/library/windows/desktop/aa365917(v=vs.85).aspx procedure GetConnectionNameList(List: TStrings); var pAdapterList: PIP_ADAPTER_INFO; dwLenAdapter: DWORD; ErrorCode : DWORD; begin List.Clear; pAdapterList := nil; // Alles auf 0 ==> Benötigte Buffergrösse ermitteln dwLenAdapter := 0; ErrorCode := GetAdaptersInfo(pAdapterList, @dwLenAdapter); If ErrorCode <> ERROR_BUFFER_OVERFLOW then begin RaiseLastOSError(ErrorCode); exit; end; pAdapterList := AllocMem(dwLenAdapter); try ErrorCode := GetAdaptersInfo(pAdapterList, @dwLenAdapter); If ErrorCode <> ERROR_SUCCESS then begin RaiseLastOSError(ErrorCode); exit; end; while Assigned(pAdapterList) do begin List.Add(Format('AdapterName: %s', [String(pAdapterList.AdapterName)])); List.Add(Format('Descpription: %s', [String(pAdapterList.Description)])); List.Add(Format('ComboIndex: %d', [pAdapterList.ComboIndex])); List.Add(Format('AddressLength: %d', [pAdapterList.AddressLength])); List.Add(Format('Address: %d', [UInt64(pAdapterList.Address)])); List.Add(Format('Index: %d', [pAdapterList.Index])); List.Add(Format('dwType: %d', [pAdapterList.dwType])); List.Add(Format('DhcpEnabled: %d', [pAdapterList.DhcpEnabled])); List.Add(Format('IpAddressList.IpAddress: %s', [String(pAdapterList.IpAddressList.IpAddress.acString)])); List.Add(Format('IpAddressList.IpMask: %s', [String(pAdapterList.IpAddressList.IpMask.acString)])); List.Add(Format('IpAddressList.Context: %d', [pAdapterList.IpAddressList.Context])); List.Add(Format('GatewayList.IpAddress: %s', [String(pAdapterList.GatewayList.IpAddress.acString)])); List.Add(Format('GatewayList.IpMask: %s', [String(pAdapterList.GatewayList.IpMask.acString)])); List.Add(Format('GatewayList.Context: %d', [pAdapterList.GatewayList.Context])); List.Add(Format('DhcpServer.IpAddress: %s', [String(pAdapterList.DhcpServer.IpAddress.acString)])); List.Add(Format('DhcpServer.IpMask: %s', [String(pAdapterList.DhcpServer.IpMask.acString)])); List.Add(Format('DhcpServer.Context: %d', [pAdapterList.DhcpServer.Context])); List.Add(Format('IpAddressList.HaveWins: %d', [Integer(pAdapterList.HaveWins)])); List.Add(Format('PrimaryWinsServer.IpAddress: %s', [String(pAdapterList.PrimaryWinsServer.IpAddress.acString)])); List.Add(Format('PrimaryWinsServer.IpMask: %s', [String(pAdapterList.PrimaryWinsServer.IpMask.acString)])); List.Add(Format('PrimaryWinsServer.Context: %d', [pAdapterList.PrimaryWinsServer.Context])); List.Add(Format('SecondaryWinsServer.IpAddress: %s', [String(pAdapterList.SecondaryWinsServer.IpAddress.acString)])); List.Add(Format('SecondaryWinsServer.IpMask: %s', [String(pAdapterList.SecondaryWinsServer.IpMask.acString)])); List.Add(Format('SecondaryWinsServer.Context: %d', [pAdapterList.SecondaryWinsServer.Context])); List.Add('-------------------------------------------------------'); pAdapterList := pAdapterList.Next; end; finally FreeMem(pAdapterList); end; end; procedure TForm1.Button1Click(Sender: TObject); begin GetConnectionNameList(Memo1.Lines); end; Nur, und jetzt bitte keine Schläge, in meinem ersten Post oben fragte ich nach dem Namen der Netzwerkverbindung - diese wird mir jetzt über GetAdaptersInfo nicht mehr angeboten. Kann man die über GetAdaptersInfo nicht auslesen? - muss ich dazu WMI benutzen? Ich würd halt ungern zwei "verschiedene" Funktionen nutzen um eigentlich im gleichen Bereich (also Netzwerk) Daten auszulesen [Edit] In der Code-Libary findet man diesen ![]() Damit könnt ich aus der Registry den Namen auslesen... |
AW: Namen der Netzwerk-Verbindungen auslesen
Tipp:
Gibt es in XE schon diese Units?
Delphi-Quellcode:
(bzw. IpTypes und IpHlpApi)
uses
Winapi.IpTypes, Winapi.IpHlpApi; Und pssst, Dein FreeMem gibt nichts frei, da dort der Pointer nil ist (weil dieser ja seit dem GetMem verändert "Next" wurde). (siehe mein Edit ... hatte das auch erst vergessen :oops:, aber keine Sorge ... der Code vom CodeOrakel, vergißt dagegen sogar komplett der Freigeben) Da AdapterName ein ANSI-String ist, besser nach AnsiString und nicht String "casten" (
Delphi-Quellcode:
) ... dann gibt's eventuell auch weniger Compilerhinweise, bezüglich ANSI<>Unicode.
String(pAdapterList.AdapterName)
Und IpAddressList = evetuell auch mehrere IPs und nicht nur Eine. |
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
[Edit] sehr praktische Units - spart viel Definitionsarbeit (vor allem wenn man es schon getan hat :-( ) |
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
Aber dann dürft ja FreeMem nichts zu tun haben und falls ja, dann wird Speicher freigegeben. Ich seh jetzt nicht so das Problem das drinzulassen, oder? Zitat:
Zitat:
So - jetzt muss ich Himitsu genügend Zeit zum Antworten und Editieren geben.... - ist halt nimmer der Jüngste :mrgreen: |
AW: Namen der Netzwerk-Verbindungen auslesen
Mit GetAdaptersInfo funktioniert es nur mit der Registry. Wenn Du nur System gleich oder größer Windows XP unterstützen möchtest, dann nimm
![]() |
AW: Namen der Netzwerk-Verbindungen auslesen
Wenn man FreeMem nil gibt, dann macht es nichts, da es ja denkt es gäbe nichts freizugeben.
Man muß ihm schon einen Pointer geben, welcher auch (noch) auf den freizugebenden Speicherblock zeigt. |
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
Den "FriendlyName" hab ich gefunden - genau das was ich suche Ich sehe GetAdaptersAddresses als Ergänzung zu GetAdaptersInfo an |
AW: Namen der Netzwerk-Verbindungen auslesen
Hat schon mal jemand
![]()
Delphi-Quellcode:
compiliert/ausgeführt?
ReportMemoryLeaksOnShutdown:= True;
Ich frage bloß deshalb, weil ich damit einen belegten Speicherblock angezeigt bekomme. Ich habe ![]()
Delphi-Quellcode:
der aktuelle Eintrag auf eine Temp-Variable übertragen und diese dann jedes Mal freigegeben wird. Damit bekomme ich kein Speicherleck mehr.
pAdapterList := pAdapterList.Next;
Ich liebe aber kurzen Code. Daher meine Frage. Sollte es also wirklich kürzer gehen, würde ich mich über eine Antwort freuen. |
AW: Namen der Netzwerk-Verbindungen auslesen
Für die Schleife muß man eine eigene Variable verwenden, denn durch
Delphi-Quellcode:
wird ja der Zeiger verschoben, und
pAdapterList:=pAdapterList.Next
Delphi-Quellcode:
kann dann nicht mehr das freigeben, was durch
FreeMem(pAdapterList)
Delphi-Quellcode:
reserviert wurde.
AllocMem
|
AW: Namen der Netzwerk-Verbindungen auslesen
Ich habs nur überflogen, aber meiner Meinung nach muß in der Schleife
Delphi-Quellcode:
PIP_ADAPTER_INFO genutzt werden.
while Assigned(pAdapterList) do
Und die Freigabe für pAdapterlist ist in Ordung. Gruß K-H |
AW: Namen der Netzwerk-Verbindungen auslesen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz