![]() |
Re: Subnetzmaske/ Server finden
Moin Andy,
Zitat:
|
Re: Subnetzmaske/ Server finden
Hallo nochmal!
Ich komme mir ein wenig blöd vor, weil ich noch einmal frage, aber: Das mit dem AdaptersInfo hat bei mir nicht ganz funktioniert. Wahrscheinlich liegt es an meinem eigenem Unwissen. Denn ich habe es nicht geschafft, die Subnetzmaske auszulesen, bzw. habe ich nur die eigene IP Adresse und irgendeine Maske (der Wert war 0.0.0.0, also definitiv nicht meine Subnetzmaske) herauslesen können. WNetEnumResource ist, glaube ich, in meinem Fall nicht das Richtige, weil da doch nur die Rechner angezeigt werden, die auch in der Netzwerkumgebung sind. Oder täusche ich mich da? Vielleicht könntet ihr mir noch einmal helfen? Vielen Dank schon im voraus, EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
wie hast Du's denn gemacht. Ein bisschen Source wäre ganz hilfreich. |
Re: Subnetzmaske/ Server finden
Ich habe mir den Code von hier genommen:
![]() Diese beiden habe ich herauslesen können:
Delphi-Quellcode:
Der Rest war mir nicht wirklich klar (ich bitte um Entschuldigung, aber mir der API habe ich bis jetzt eher weniger gemacht).
IpAddress : IP_ADDRESS_STRING;
IpMask : IP_MASK_STRING; Wie gesagt; ich bräuchte die Subnetzmaske (IpMask wars nicht). mfg EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
Zitat:
Hier mal die Repeat Until Schleife aus dem Beispiel (die zu ändernden Stellen rot)
Code:
repeat
iasWork := pAdapterWork.[color=red]IpAddressList[/color]; while iasWork.Next <> nil do begin cobGateway.Items.Add(trim(iasWork.[color=red]IpMask[/color].acString)); iasWork := iasWork.Next^; end; cobGateway.Items.Add(trim(iasWork.[color=red]IpMask[/color].acString)); pAdapterWork := pAdapterWork.Next; until pAdapterWork = nil; Zitat:
Da sind die meisten Dinge genau dokumentiert. Was jetzt nicht heissen soll, dass Du nicht mehr fragen sollst. Vor allem, wer den Umgang mit dem PSDK nicht gewohnt ist wird manchmal (oft?) Schwierigkeiten haben das passende zu finden. In diesem Falle kannst Du ja mal sehen, ob Du mit der Dokumentation zu den hier verwendeten Datentypen klarkommst. |
Re: Subnetzmaske/ Server finden
Vielen Dank, dass ihr mir immer noch zur Seite steht!
Also ich habe jetzt einmal all das rot Markierte umgeändert, jedoch kommt bei mir eine Fehlermeldung: Inkompatible Typen: 'IP_ADDR_STRING' und 'PIP_ADAPTER_INFO' ...und das in der folgender Zeile:
Delphi-Quellcode:
Bin schon total verzweifelt! :wall:
iasWork := pAdapterWork.IpAddressList;
mfg, EConvertError PS: Beim MSDN hatte ich auch kein Glück. |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
hier noch mal das Original komplett
Code:
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 Char; end; PIP_MASK_STRING = ^PIP_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 Char ; Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH+4] of Char; 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'; implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); var dwResult : DWORD; dwLen : DWORD; pAdapterWork : PIP_ADAPTER_INFO; pAdapterList : PIP_ADAPTER_INFO; iasWork : IP_ADDR_STRING; begin pAdapterList := nil; dwLen := 0; dwResult := GetAdaptersInfo(pAdapterList,@dwLen); if dwResult = ERROR_BUFFER_OVERFLOW then begin pAdapterList := AllocMem(dwLen); try dwResult := GetAdaptersInfo(pAdapterList,@dwLen); if dwResult = ERROR_SUCCESS then begin pAdapterWork := pAdapterList; cobGateway.Clear; repeat ShowMessage(trim(pAdapterWork.Description)); iasWork := pAdapterWork.GatewayList; [color=red]// auf GatewayList durch IpAddressList austauschen[/color] while iasWork.Next <> nil do begin cobGateway.Items.Add(trim(iasWork.IpAddress.acString)); [color=red]// und hier IpAddress durch IpMask[/color] iasWork := iasWork.Next^; end; cobGateway.Items.Add(trim(iasWork.IpAddress.acString)); [color=red]// hier auch IpAddress durch IpMask tauschen[/color] pAdapterWork := pAdapterWork.Next; until pAdapterWork = nil; if cobGateway.Items.Count > 0 then begin cobGateway.ItemIndex := 0; end; end; finally FreeMem(pAdapterList,dwLen); end; end; end; |
Re: Subnetzmaske/ Server finden
Vielen Dank, Chris!
Es funktioniert! Danke noch mal, EConvertError |
Re: Subnetzmaske/ Server finden
Moin EConvertError,
prima, aber könntest Du mal sagen, warum es vorher nicht ging. Da war doch kein Unterschied. :gruebel: |
Re: Subnetzmaske/ Server finden
Hi!
Ehrlich gesagt habe ich keine Ahnung. :?: Zitat:
Angesichts der Mathematik- Schularbeit übermorgen werde ich die genaue Überprüfung der beiden Versionen verschieben, und mich einfach nur freuen dass es funktioniert. Danke noch mal, EConvertError |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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