| Autor |
Beitrag |
starsurfer 
      
Beiträge: 334
Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
|
Verfasst: Mo 30.10.06 12:00
ok, ich habs jetzt selber zum laufen gebracht, und natürlich hat sich ein neues Problem ergeben
Es liest die Informationen über die Netzwerkadapter richtig aus, aber so bald ich 3 aktiviert habe (LAN,WLAN,DSL ADAPTER) und das Programm suchen lasse sagt er mir "Dateiname zu lang" obwohl ich rein gar nix mit Dateien mach....
sind nur 2 Adapter aktiviert funktionierts ohne Probleme, könnt ihr das bei euch bitte testen ?
Exe ist im Anhang.
Danke star
//EDIT: EXE und Source angehängt + IpHlpAPI.pas
Einloggen, um Attachments anzusehen!
_________________ GEIZ IST GEIL! - Ihr Sozialamt
Zuletzt bearbeitet von starsurfer am Mo 30.10.06 19:06, insgesamt 2-mal bearbeitet
|
|
espen
      
Beiträge: 90
Erhaltene Danke: 1
D6 Prof./D7 Prof. MSSQL, MySQL
|
Verfasst: Mo 30.10.06 12:32
Hi,
eine Möglichkeit wäre noch über WMI:
www.delphipraxis.net...a+wmi+ermitteln.html
oder über die shell:
Quelltext
und die mac.txt parsen.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 30.10.06 15:13
Also, ich bin jetzt leider nicht zu Hause, deshalb geht es jetzt nicht, aber ich werd mir das Programm mal nachher ansehen.
Und klar, WMI ist auch eine sehr gute Moeglichkeit.
|
|
starsurfer 
      
Beiträge: 334
Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
|
Verfasst: Mo 30.10.06 19:30
Mmmhhh...
Die Uses für wmi hab ich nicht. Ich hab nach denen gesucht aber nix gefunden...
Das Beispiel was du mir gegeben hast liefert mir das nur die MAC Adressen oder auch die Bezeichnungen dazu?
So wie ich das versteh bekomm ich nur de MAC geliefert.
Nur ne MAC nützt mir aber recht wenig, ich brauch min de Bezeichnung und den Name des Adapters.
--------------------------------------
Hab noch was anderes probiert:
im Programm (siehe oben) hab ich getadaptersinfo() genutzt,
jetzt hab ichs mal mit getadaptersaddresses() versucht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| uses ..., jwaiphlpapi,jwaiptypes,jwawinsock2,...
. . .
procedure TForm1.Button1Click(Sender: TObject); var adapter:pip_adapter_addresses; buffer:dword; Error:dword; P:pointer; begin buffer:=sizeof(adapter^); new(adapter); error:=GetAdaptersAddresses(0,0,nil,adapter,@buffer); p:= adapter; if error = no_error then begin
end else begin memo1.Clear; memo1.lines.add(SysErrorMessage( Error )); end; end; |
jetzt liefert er mir immer den Error 111 (Dateiname zu lang) egal welcher Adapter an oder aus ist... 
_________________ GEIZ IST GEIL! - Ihr Sozialamt
|
|
Roy
      
Beiträge: 184
Windows7 Ultimate
Delphi 2007, NET, Embarcadero
|
Verfasst: Mo 19.05.08 20:28
Hallo Starsurver,
bei deinem Angehängten Dateien ermittelt er mir nichts. Es kommt nur die Meldung "Der Dateiname ist zu lang".
Gruß Roy
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 19.05.08 23:03
Moin!
Auch wenn der Thread schon etwas angestaubt ist, kann ja nicht schaden, nochmal eine Lösung nachzuliefern!
starsurfer hat folgendes geschrieben: | | jetzt hab ichs mal mit getadaptersaddresses() versucht: |
Wie auch immer du auf diesen Code gekommen bist  , hier ist ein Port des Quelltextes von der MSDN-Seite ( läuft aber erst ab WinXP!):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174:
| type TfrmMain = class(TForm) meLog: TMemo; BtnStart: TButton; procedure BtnStartClick(Sender: TObject); procedure FormCreate(Sender: TObject); uses jwaiphlpapi, jwaiptypes, jwawinsock2;
function CheckWinXP: Boolean; begin Result := (Win32Platform = 2) and (Win32MajorVersion = 5) and (Win32MinorVersion >= 1); end;
procedure TfrmMain.FormCreate(Sender: TObject); begin if NOT CheckWinXP then begin MessageDlg('Required OS: >= WinXP!',mtInformation,[mbCancel],0); Application.Terminate; end; end;
procedure TfrmMain.BtnStartClick(Sender: TObject); var dwFamily, dwFlags, dwBufLen, dwRetVal: DWORD; pAddresses, pCurrAddresses: PIP_ADAPTER_ADDRESSES;
pUnicast: PIP_ADAPTER_UNICAST_ADDRESS; pAnycast: PIP_ADAPTER_ANYCAST_ADDRESS; pMulticast: PIP_ADAPTER_MULTICAST_ADDRESS; pDnServer: PIP_ADAPTER_DNS_SERVER_ADDRESS; pPrefix: PIP_ADAPTER_PREFIX;
i: Integer; tmp: String;
procedure Logout(const S: String); begin meLog.Lines.Add(S); end;
begin meLog.Clear; dwFamily := AF_UNSPEC; dwFlags := GAA_FLAG_INCLUDE_PREFIX; dwBufLen := SizeOf(IP_ADAPTER_ADDRESSES); GetMem(pAddresses,dwBufLen); if Assigned(pAddresses) then try if (GetAdaptersAddresses(dwFamily, dwFlags, NIL, pAddresses, @dwBufLen) = ERROR_BUFFER_OVERFLOW) then begin FreeMem(pAddresses); GetMem(pAddresses,dwBufLen); if Assigned(pAddresses) then begin dwRetVal := GetAdaptersAddresses(dwFamily, dwFlags, NIL, pAddresses, @dwBufLen); if (dwRetVal = NO_ERROR) then begin pCurrAddresses := pAddresses; while Assigned(pCurrAddresses) do begin Logout('Length of the IP_ADAPTER_ADDRESS struct: '+IntToStr(pCurrAddresses^.Union.Length)); Logout('IfIndex (IPv4 interface): '+IntToStr(pCurrAddresses^.Union.IfIndex)); Logout('Adapter name: '+pCurrAddresses^.AdapterName);
pUnicast := pCurrAddresses^.FirstUnicastAddress; if Assigned(pUnicast) then begin i := 0; while Assigned(pUnicast) do begin pUnicast := pUnicast^.Next; Inc(i); end; Logout('Number of Unicast Addresses: '+IntToStr(i)); end else Logout('No Unicast Addresses');
pAnycast := pCurrAddresses^.FirstAnycastAddress; if Assigned(pAnycast) then begin i := 0; while Assigned(pAnycast) do begin pAnycast := pAnycast^.Next; Inc(i); end; Logout('Number of Anycast Addresses: '+IntToStr(i)); end else Logout('No Anycast Addresses');
pMulticast := pCurrAddresses^.FirstMulticastAddress; if Assigned(pMulticast) then begin i := 0; while Assigned(pMulticast) do begin pMulticast := pMulticast^.Next; Inc(i); end; Logout('Number of Multicast Addresses: '+IntToStr(i)); end else Logout('No Multicast Addresses');
pDnServer := pCurrAddresses^.FirstDnsServerAddress; if Assigned(pDnServer) then begin i := 0; while Assigned(pDnServer) do begin pDnServer := pDnServer^.Next; Inc(i); end; Logout('Number of DNS Server Addresses: '+IntToStr(i)); end else Logout('No DNS Server Addresses');
Logout('DNS Suffix: '+pCurrAddresses^.DnsSuffix); Logout('Description: '+pCurrAddresses^.Description); Logout('Friendly name: '+pCurrAddresses^.FriendlyName);
if (pCurrAddresses^.PhysicalAddressLength <> 0) then begin tmp := ''; for i := 0 to pCurrAddresses^.PhysicalAddressLength -1 do begin tmp := tmp +IntToHex(pCurrAddresses^.PhysicalAddress[i],2); if (i < Integer(pCurrAddresses^.PhysicalAddressLength -1)) then tmp := tmp +'-'; end; Logout('Physical address: '+tmp); end; Logout('Flags: '+IntToStr(pCurrAddresses^.Flags)); Logout('MTU: '+IntToStr(pCurrAddresses^.Mtu)); Logout('IfType: '+IntToStr(pCurrAddresses^.IfType)); Logout('OperStatus: '+IntToStr(Integer(pCurrAddresses^.OperStatus))); Logout('Ipv6IfIndex (IPv6 interface): '+IntToStr(pCurrAddresses^.Ipv6IfIndex)); tmp := ''; for i := 0 to 15 do tmp := tmp +IntToHex(pCurrAddresses^.ZoneIndices[i],8); Logout('ZoneIndices (hex): '+tmp);
pPrefix := pCurrAddresses^.FirstPrefix; if Assigned(pPrefix) then begin i := 0; while Assigned(pPrefix) do begin pPrefix := pPrefix^.Next; Inc(i); end; Logout('Number of IP Adapter Prefix entries: '+IntToStr(i)); end else Logout('Number of IP Adapter Prefix entries: 0'); Logout(''); pCurrAddresses := pCurrAddresses^.Next; end; end else begin if (dwRetVal = ERROR_NO_DATA) then MessageDlg('No adapter information available!',mtInformation,[mbOK],0) else SysErrorMessage(dwRetVal); end; end else MessageDlg('Out of memory! (2)',mtError,[mbCancel],0); end; finally FreeMem(pAddresses); end else MessageDlg('Out of memory! (1)',mtError,[mbCancel],0); end; |
Roy hat folgendes geschrieben: | | bei deinem Angehängten Dateien ermittelt er mir nichts. Es kommt nur die Meldung "Der Dateiname ist zu lang". |
Ähm...  das sagt er doch selbst schon die ganze Zeit...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|