Also ich hab jetzt mal provisorisch ein kleines Testprogramm geschrieben und muss erstmal sagen es funktioniert schonmal soweit. Allerdings wird zur Zeit nur ein Adapter ausgegeben. Irgendwas stimmt mit der For-Schleife noch nicht.
Was ich im Taskmanger bemerkt habe ist, dass der Arbeitsspeicher mit jedem Zyklus voller wird. Weiß zwar noch nicht genau was aber ich denke mal dass ich nach jedem Aufruf noch etwas reseten bzw. nullen sollte.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WinSock,
ActiveX, ComObj, ExtCtrls;
type
TForm1 =
class(TForm)
Timer1: TTimer;
Panel1: TPanel;
procedure Timer1Timer(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
wmi : variant;
wmiService : variant;
nicstatus : variant;
card : Olevariant;
cnt : integer;
Enum: IEnumVariant;
P : IUnknown;
F : Cardinal;
connected : integer;
status :
string;
begin
WMI:=CreateOleObject('
WbemScripting.SWbemLocator');
wmiService :=
wmi.ConnectServer('
.', '
root\wmi');
nicstatus := wmiService.InstancesOf('
MSNdis_MediaConnectStatus');
p := nicstatus._NewEnum;
p.QueryInterface(IEnumVariant, Enum);
for cnt := 0
to nicstatus.Count - 1
do
begin
Enum.Next(1, card, F);
connected := card.NdisMediaConnectStatus;
if (connected = 0)
then
Status := '
verbunden'
else
Status := '
nicht verbunden';
Panel1.Caption := card.InstanceName + '
: ' + status;
//ShowMessage(card.InstanceName + ' : ' + Status);
end;
end;
end.