AGB  ·  Datenschutz  ·  Impressum  







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

Feststellen, ob Netzwerkkabel gezogen wurde?

Ein Thema von raffix · begonnen am 24. Mär 2003 · letzter Beitrag vom 2. Jun 2008
Antwort Antwort
Seite 4 von 11   « Erste     234 56     Letzte » 
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#31

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 9. Jun 2004, 19:51
wenn mein Rechner nicht mit dem Switch verbunden ist, so bekomm ich als IP immer die localhost-adresse. Sobald eine Verbindung besteht hat er die IP, wie ich sie festgelegt habe (192.168.10.1)
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Kasoft

Registriert seit: 5. Mai 2004
Ort: Filderstadt
111 Beiträge
 
Delphi 7 Professional
 
#32

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 9. Jun 2004, 20:22
Hat jetzt mein Code wirklich bei keinem Funktioniert?
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#33

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 9. Jun 2004, 20:51
Wenn du eine schreibgeschützte Datei auf ein Netzlaufwerk packts, auf das alle clients Zugriff haben, müsste doch fileexists gehen, oder?

Ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
novabeat
(Gast)

n/a Beiträge
 
#34

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 9. Jun 2004, 23:03
also ich hab mal bei mir in die registry geschaut. da existieren die werte, die du da abfrgats nicht mal
  Mit Zitat antworten Zitat
djmasi

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

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 8. Jul 2004, 09:46
Hatte mich auch schon mit dem Thema rumgeärgert. Die Sachen mit Registry und MAC Adresse fallen raus, da das mit der Reg auf jedem Windows unterschiedlich ist und die MAC bei Entfernen des Kabels erhalten bleibt.

Habe aber gerade etwas gefunden bei delphi3000.com.

bin mal so frei und liste den verwendeten Code:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button2: TButton;
    Timer1: TTimer;
    CheckBox1: TCheckBox;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function DetectHostIP: boolean;
  end;

var
  Form1: TForm1;
  HostIP:String='Unknown';


implementation

{$R *.dfm}

function TForm1.DetectHostIP: Boolean;
var
  wsdata: TWSAData;
  hostname: array[0..255] of char;
  hostEnt: PHostEnt;
  addr: PChar;
begin
  WSAStartup($0101,wsdata);
  try
    gethostname(hostname,sizeof(hostname));
    hostEnt := gethostbyname(hostname);
    if Assigned(hostEnt) then
      if Assigned(hostEnt^.h_addr_list) then
        begin
          addr := hostEnt^.h_addr_list^;
          if Assigned(addr) then
            begin
              HostIP := Format('%d.%d.%d.%d',[byte(addr[0]),byte(addr[1]),byte(addr[2]),byte(addr[3])]);
              Result := True;
            end
          else
            Result := False;
        end
      else
        Result := False
    else
      begin
        MessageDlg(Format('WinSock Error %d', [WSAGetLastError]),mtError,[mbOK],0);
        Result := False;
      end;
  finally
    WSACleanup;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if DetectHostIP=True then ShowMessage(HostIP);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if DetectHostIP=True then
    if HostIP <> '127.0.0.1then
      CheckBox1.Checked := True //CheckBox sagt: Netzwerkkabel steckt
    else
      CheckBox1.Checked := False; //oder halt net
end;

end.
Bei mir funktioniert das wunderbar, nach dem Rausziehen dauert es circa 5 sek, beim Reinstecken 1/2 sek bis es umschlägt.

Das Problem ist allerdings: Bei meinem Centrino 1.5 braucht das Prog 20% CPU. Das darf natürlich nicht sein. Habe aber grad keine Lust da ich morgen ne Algebra Klausur schreibe.

Aber werde mich damit weiter befassen.

Ciao Thomas
Thomas Maßmann
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#36

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 8. Jul 2004, 10:18
Evtl. ist das hier was du suchst: MSDN-Library durchsuchenRasConnectionNotification und evtl (wenn auch unwahrscheinlicher MSDN-Library durchsuchenRasAdminConnectionHangupNotification
  Mit Zitat antworten Zitat
djmasi

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

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 8. Jul 2004, 17:36
Leider nein

Mir geht es ja um die lokale IP und keine Interneteinwahl.

Aber nochmal zur Überlegung. Was soll angezeigt werden?
  • Alle Netzwerkverbindungen
  • Deren jeweiliger Status (z.B. LAN verfügbar, Adresse xyz, WLAN nicht verfügbar, 1394 nicht verfügbar/deaktiviert,...)
Thomas Maßmann
  Mit Zitat antworten Zitat
djmasi

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

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 10. Jul 2004, 23:58
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
Angehängte Dateien
Dateityp: rar netzwerkkabel.rar (196,6 KB, 103x aufgerufen)
Thomas Maßmann
  Mit Zitat antworten Zitat
novabeat
(Gast)

n/a Beiträge
 
#39

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 11. Jul 2004, 09:10
also ich habs mal getestet ! bei mir unter WinXP home gehts einwandfrei allerdings unter WinME gehts gar nicht.
  Mit Zitat antworten Zitat
djmasi

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

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 11. Jul 2004, 10:53
Hmm, hab gerade gesehen dass es NetConnectionID erst ab XP gibt. Da ich kein Win98/ME mehr habe, wäre es schön wenn vielleicht jemand für diese Windows-Versionen was findet.
Die Funktionen von Win32_NetworkAdapter findet ihr hier

[edit]
@novabeat:
kannst du mir bitte eine genaue Fehlerbeschreibung geben. An welcher Zeiler hängt es unter ME, etc?

Danke
Thomas Maßmann
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 07:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf