Autor Beitrag
starsurfer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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++
BeitragVerfasst: Mo 30.10.06 12:00 
ok, ich habs jetzt selber zum laufen gebracht, und natürlich hat sich ein neues Problem ergeben :bawling:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 90
Erhaltene Danke: 1


D6 Prof./D7 Prof. MSSQL, MySQL
BeitragVerfasst: 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:
ausblenden Quelltext
1:
GetMac /V > mac.txt					

und die mac.txt parsen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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++
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

Windows7 Ultimate
Delphi 2007, NET, Embarcadero
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 19.05.08 23:03 
Moin!

Auch wenn der Thread schon etwas angestaubt ist, kann ja nicht schaden, nochmal eine Lösung nachzuliefern! ;)

user profile iconstarsurfer hat folgendes geschrieben:
jetzt hab ichs mal mit getadaptersaddresses() versucht:
Wie auch immer du auf diesen Code gekommen bist :shock:, hier ist ein Port des Quelltextes von der MSDN-Seite (läuft aber erst ab WinXP!): :idea:
ausblenden volle Höhe 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:
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 = 2and
            (Win32MajorVersion = 5and
            (Win32MinorVersion >= 1);
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  // naja, das Ding bricht sowieso schon vorher ins Essen,
  // weil die statische Bindung der DLL nicht klappen wird...
  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 <> 0then 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// while
// -----------------------------------------------------------------------------
          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;



user profile iconRoy hat folgendes geschrieben:
bei deinem Angehängten Dateien ermittelt er mir nichts. Es kommt nur die Meldung "Der Dateiname ist zu lang".
Ähm... 8) das sagt er doch selbst schon die ganze Zeit... :lol:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.