Stichwort Mediasensing....
habe unter
http://www.ndis.com/faq/QA01050301/default.htm den bereits erwähnten Weg gefunden unter Win2k eine Abfrage über den Verbindungsstatus der Netzwerkkarte zu machen. In der Klasse MSNdis_MediaConnectStatus gibt es für jeden Netzwekadapter NdisMediaStateConnected. Bei 0 besteht eine Verbindung und bei 1 eben nicht. Habe das Ganze mit dem
WMI-Tester unter Win2k SP4 erfolgreich getestet.
Jetzt habe ich auch eine Funktion gefunden die das ganze Abfragen soll doch leider bringt mir der Compiler 2 nicht deklarierte Bezeichner (IEnumVariant, CreateOleObject) und dass IEnumVariant kein Element "Next" enthält. Ich vermute mal dass ich noch was einbinden muss aber schaut es euch lieber selbst mal an!
(Quelle der Funktion:
http://www.experts-exchange.com/Prog..._21072409.html)
Delphi-Quellcode:
procedure ShowNetworkStatus;
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 := '
connected'
else
Status := '
network cable unplugged';
ShowMessage(card.InstanceName + '
: ' + Status);
end;
end;
Ziel soll es letztendlich sein auf einem System mit zwei Netzwerkkarten (1xLAN und 1xWLAN) zu erkennen ob ein Lan-Kabel gesteckt wurde um danach abfragen zu können ob gewechselt werden soll. Demnach fällt bei mir die Localhostabfrage weg da dieser bei getrennter LAN und gleichzeitig vorhandener WLAN-Verbindung dieser nicht vorhanden ist.