AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Feststellen, ob Netzwerkkabel gezogen wurde?
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen, ob Netzwerkkabel gezogen wurde?

Ein Thema von raffix · begonnen am 24. Mär 2003 · letzter Beitrag vom 2. Jun 2008
Antwort Antwort
Seite 8 von 11   « Erste     678 910     Letzte »    
djmasi

Registriert seit: 9. Jun 2004
Ort: Leipzig
105 Beiträge
 
Delphi 7 Enterprise
 
#71

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 30. Sep 2004, 17:35
Also ich hab XP SP2 und es funktioniert ohne Probleme. Unter 2000 SP3 lief es auch (glaub ich jedenfalls). Nur unter 98/ME läuft es nicht. Aber mit SP4 für 200 probier ich nochmal.

Das ganze kommt ja aus der sensapi.dll. Schau mal was du für ne Version hast
Thomas Maßmann
"...ihr würdet selbst den lieben Gott einbetonieren, wenn eure Datenbank ihn eines Tag's erfasst..."
H.-R.-Kunze
Auch Delphi 9 Preview-Inhaber bin
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#72

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 30. Sep 2004, 19:58
Wie finde ich heraus welche Version ich habe?

Ich glaube nicht dass es daran liegt wenn du auch das SP2 hast und es bei dir funktioniert.

Bei Windows 2000 geht es jetzt aber!
Dann hat sich das Problem erledigt weil ich es nur fürs 2000er brauche.
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#73

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 30. Sep 2004, 20:35
Hi!

Zitat von Tubos:
Wie finde ich heraus welche Version ich habe?
Normalerweise Rechtsklick auf die Datei, Eigenschaften, Registerkarte Version. Dann sollte es irgendwo dabei stehen.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#74

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 2. Okt 2004, 13:03
Ich habe mich geirrt, der Code funktioniert doch nicht unter Windows 2k und liefert immer "LAN" auch wenn gar keine Verbindung vorhanden ist.

Und unter Windows XP funktioniert er wieder ... verrückt!

Die sensapi.dll-Version auf dem Windows-2000-PC ist 5.0.2195.6627.
Lukas
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#75

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 21. Okt 2004, 19:22
Ich bins wieder.

Es funktioniert doch unter Win2k!

Allerdings beträgt die Verzögerung etwa 5 Minuten.
Mein Bruder hat das Kabel rausgezogen, und nach 5 Minuten hat er sich beschwert dass der Computer nicht mehr geht.
Danach hat er wieder 5 min warten müssen bis es wieder gegangen ist.

Das hat er sich gemerkt, jetzt zieht er es nicht mehr raus

mfg. Tubos
Lukas
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#76

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 25. Feb 2005, 08:00
Zitat von djmasi:
Hab's geschafft! Nach langem hin- und her hab ich die WMI zum laufen bekommen. Es werden jetzt alle Netzwerkadapter ausgegeben, die auch in "Netzwerkverbindungen" stehen, deren MAC-Adresse und Status (Connected/NOT Connected).

Probiert es mal bitte unter anderen OS als XP/SP1 aus und postet mal die Resultate.

Delphi-Quellcode:
unit UNetWMI;

interface

uses
   // Delphi VCL Units
   Classes, Variants;

   // external forward declarations
   function getSystemMACAddresses: TStringList;

implementation

uses
   // Delphi VCL Units
   Windows,
   Dialogs,
   ComObj,
   ActiveX,
   // Imported type libraries
   WbemScripting_TLB; { Typelib name: "Microsoft Windows WMI Scripting V1.2 Library" }

const
   // define used constants
   WMI_LOCAL_COMPUTER = '.';
   WMI_SYSTEM_NAMESPACE = 'root\CIMV2';
   WMI_CLASS_NIC = 'Win32_NetworkAdapter';
   WMI_ATTRIB_ADAPTER = 'AdapterType';
   WMI_ATTRIB_AVAILAB = 'NetConnectionID';
   WMI_ATTRIB_CONNSTAT = 'NetConnectionStatus';
   WMI_ATTRIB_MAC = 'MACAddress';
   WMI_ATTRIB_NAME = 'Name';

// retrieve System MAC Addresses via WMI
//
function getSystemMACAddresses: TStringList;
var
   l_WMILocator: ISWbemLocator; // Locator, gets Services
   l_WMIServices: ISWbemServices; // Services, gets Object Definitions
   l_WMIObjectDefinition: ISWbemObject; // Definition, gets Set of Objetcs
   l_WMIObjectSet: SWbemObjectSet; // ObjectSet, gets Enum over Instances
   l_WMIObjectInstances: IEnumVariant; // Enum of Instances, gets Object
   l_WMIObject: ISWbemObject; // Object, gets Sets of his properties
   l_WMIPropertySet: ISWbemPropertySet; // PropertySet, gets single property
   l_WMIProperty: ISWbemProperty; // Property, gets Value

   l_TempObj: OleVariant; // temporary used values
   l_ObjValue: Cardinal;
begin
   // create the return object
   result := TStringList.Create;

   // retrieve object enum through WMI classes
   l_WMILocator := CoSWbemLocator.Create;
   l_WMIServices := L_WMILocator.ConnectServer(WMI_LOCAL_COMPUTER, WMI_SYSTEM_NAMESPACE, '', '', '', '', 0, nil);
   l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS_NIC, wbemFlagUseAmendedQualifiers, nil);
   l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil);
   l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant;

   // iterate through enum values (WbemObjects) and get the property values
   while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do
   begin
      l_WMIObject:= IUnknown(l_TempObj) as SWBemObject;

      l_WMIPropertySet := l_WMIObject.Properties_;

      l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_AVAILAB, 0);
      if not VarIsNull(l_WMIProperty.Get_Value) then
        begin
          result.Add(l_WMIProperty.Get_Value);
          l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_NAME, 0);
          if not VarIsNull(l_WMIProperty.Get_Value) then
            result.Append(' - '+l_WMIProperty.Get_Value);
          l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_MAC, 0);
          if not VarIsNull(l_WMIProperty.Get_Value) then
            result.Append(' - '+l_WMIProperty.Get_Value)
          else
            result.Append(' - MAC-Address not available');
          l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_ADAPTER, 0);
          if not VarIsNull(l_WMIProperty.Get_Value) then
            result.Append(' - '+l_WMIProperty.Get_Value)
          else
            result.Append(' - Network Type not available');
          l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_CONNSTAT, 0);
          if l_WMIProperty.Get_Value=2 then
            result.Append(' - Status: Connected')
          else
            result.Append(' - Status: NOT Connected');
          result.Add('');
        end;
   end;
end;
end.
Eingebunden wird das dann folgendermaßen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items := getSystemMACAddresses;
end;

Wer die WMI Library braucht, sollte hier vorbeischauen. Aber Achtung, waren circa 323MB zum downloaden.


Anbei mal mein Versuchsprojekt
hallo

wie läuft das z.b. auf Delphi 2005? hat schon jemand WMI in Delphi 2005 verwendet?
muss ich da gewisse Units von WMI einbinden?
  Mit Zitat antworten Zitat
justify
(Gast)

n/a Beiträge
 
#77
  Alt 14. Jun 2005, 17:43
Guten Abend allerseits!

Nun habe ich mal beide Varianten ausprobiert - sowohl die lange von toyoman, als auch den Dreizeiler, der am Anfang gepostet wurde.

Allerdings habe ich folgendes Problem: toyoman's Variante läuft nur unter NT, der Dreizeiler nur unter XP!

Was nun? Eine Möglichkeit wäre ja festzustellen, welches OS gerade benutzt wird, aber das ist alles ziemlich umständlich.

Gibt's eventuell einen Befehl, mit dem man kurz und knapp abfragen kann, ob man mit dem LAN verbunden ist oder nicht?

Ich meine, um festzustellen, ob man mit dem Internet verbunden ist, geht's auch schnell mit 'nem Befehl, der mir gerade nicht einfällt, aber funktioniert.

Naja, wäre nett, wenn Ihr mal paar Tipps geben könntet.

Schönen Abend noch!
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#78
  Alt 14. Jun 2005, 18:01
Zitat von justify:
Guten Abend allerseits!

Nun habe ich mal beide Varianten ausprobiert - sowohl die lange von toyoman, als auch den Dreizeiler, der am Anfang gepostet wurde.

Allerdings habe ich folgendes Problem: toyoman's Variante läuft nur unter NT, der Dreizeiler nur unter XP!

Was nun? Eine Möglichkeit wäre ja festzustellen, welches OS gerade benutzt wird, aber das ist alles ziemlich umständlich.

Gibt's eventuell einen Befehl, mit dem man kurz und knapp abfragen kann, ob man mit dem LAN verbunden ist oder nicht?

Ich meine, um festzustellen, ob man mit dem Internet verbunden ist, geht's auch schnell mit 'nem Befehl, der mir gerade nicht einfällt, aber funktioniert.

Naja, wäre nett, wenn Ihr mal paar Tipps geben könntet.

Schönen Abend noch!

hey, die variante war nicht von mir sondern von djmasi...

ich benütze in meinen Service diese Funktion (auch irgendwo hier aus dem Forum, bisschen modifiziert):

Delphi-Quellcode:
function NetworkConnect : Boolean;
var
  reg : TRegistry;
  i : Integer;
  NetworkCards : String;
begin
  result := false;
  reg := TRegistry.Create(KEY_READ);
  reg.RootKey := HKEY_LOCAL_MACHINE;
  for i := 0 to 15 do //Mehr als 15 Netzwerkkarten sollte kein normaler Rechner haben...
  begin
    if reg.KeyExists('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\' +inttostr(i)) = true then
    begin
      logfileschreiben('----------------------------------------------------------------------------------------');
      reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\' +inttostr(i),false);
      NetworkCards := reg.ReadString('ServiceName');
      logfileschreiben('Networkcard ID: '+Networkcards);
      logfileschreiben('Networkcard description: '+reg.readstring('Description'));
     // break;
      if NetworkCards <> 'then
      begin
        reg.OpenKey('\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\'+NetworkCards,false);
        logfileschreiben('DHCP Domain: '+reg.readstring('DhcpDomain'));
        logfileschreiben('DHCP IP: '+reg.readstring('DhcpIPAddress'));
        logfileschreiben('----------------------------------------------------------------------------------------');
        if reg.ReadString('DHCPDomain') <> 'then
        begin
            result := true
        end else
        begin
            result := false;
        end;
      end;
    end;
  end;
  reg.Free;
end;
logfileschreiben ist eine Extra-Prozedur.

Aufruf:

Delphi-Quellcode:
if networkconnect=true then
   begin
      logfileschreiben('Networkcard: Network cable plugged in.');
      winipath:=vpnfile; // Konfigurationsfile
      logfileschreiben('Using network version of VPN.ini: '+winipath);
   end else
   begin
      logfileschreiben('Networkcard: Network cable unplugged!');
      winipath:=getpath+'vpn.ini';
      logfileschreiben('Network not reachable, Using local VPN.ini file: '+winipath);
   end;
  Mit Zitat antworten Zitat
justify
(Gast)

n/a Beiträge
 
#79
  Alt 14. Jun 2005, 18:04
Huhu,

sorry, da hab' ich dann wohl was verwechselt - ist ja aber auch egal!

Es geht um eine kleine Unterkategorie, die nur testen soll, ob eine LAN-Verbindung hergestellt ist oder nicht und dementsprechend was ausgeben soll, also "verbunden" oder "nicht verbunden"!

Das alles soll bei einem Buttonklick passieren.

Könntest Du mir sagen, wie ich den Code abändern muß, damit es genau so geschieht?
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#80
  Alt 14. Jun 2005, 18:16
Zitat von justify:
Huhu,

sorry, da hab' ich dann wohl was verwechselt - ist ja aber auch egal!

Es geht um eine kleine Unterkategorie, die nur testen soll, ob eine LAN-Verbindung hergestellt ist oder nicht und dementsprechend was ausgeben soll, also "verbunden" oder "nicht verbunden"!

Das alles soll bei einem Buttonklick passieren.

Könntest Du mir sagen, wie ich den Code abändern muß, damit es genau so geschieht?
Du kannst die Prozedur von oben übernehmen und in deine Button.click Prozedur eintragen (zu oberst).
-Entferne alle Logfileschreiben Zeilen die brauchst du indem Fall nicht. Uses Registry nicht vergessen!

Würde sagen so müssts gehn:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, registry, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
function NetworkConnect : Boolean;
var
  reg : TRegistry;
  i : Integer;
  NetworkCards : String;
begin
  result := false;
  reg := TRegistry.Create(KEY_READ);
  reg.RootKey := HKEY_LOCAL_MACHINE;
  for i := 0 to 15 do //Mehr als 15 Netzwerkkarten sollte kein normaler Rechner haben...
  begin
    if reg.KeyExists('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\' +inttostr(i)) = true then
    begin
      reg.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\' +inttostr(i),false);
      NetworkCards := reg.ReadString('ServiceName');
     // break;
      if NetworkCards <> 'then
      begin
        reg.OpenKey('\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\'+NetworkCards,false);
        if reg.ReadString('DHCPDomain') <> 'then
        begin
            result := true
        end else
        begin
            result := false;
        end;
      end;
    end;
  end;
  reg.Free;
end;
begin
  // Network Cable unplugged?
   if networkconnect=true then
   begin
      showmessage('Netzwerkkabel ist eingesteckt!');
   end else
   begin
      showmessage('Netzwerkkabel ist ausgesteckt!');
   end;
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 11   « Erste     678 910     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz