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 10 von 11   « Erste     8910 11      
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#91
  Alt 25. Mai 2008, 11:41
Hi, würde gerne mal die hier geposteten Codes ausprobieren da ich ein ähnliches Problem lösen möchte. Leider schaff ich es nicht den COde zu übersetzen. Benutze Delphi2006 und beim Compilieren kommt die Meldung "Field Form1.Button1 does not have a corresponding component. Remove the declaration?" Als Projekt habe ich New VCL Forms Application genommen.

Verwendet habe ich z.B. den Code von toyoman

[quote="toyoman"]
Zitat von justify:

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
toyoman

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

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 26. Mai 2008, 07:44
hast du denn ein Form1 und einen Button1 auf dem Form drauf?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#93

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 26. Mai 2008, 08:02
Lösch mal Zeile 11 und 26.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#94

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 26. Mai 2008, 08:42
@toyoman,
vielen Dank! Hatte den Button nicht drauf. Nur jetzt wo ich ihn drauf habe kommt keine Fehlermeldung jedoch zeigt er mir keinen Status an ob das Kabel gesteckt ist oder nicht.

Da ich erst angefangen habe mich mit Delphi auseinanderzusetzen kann es gut möglich sein dass es sich um Basics handelt. Bin aber parallel dabei mich einzuarbeiten.

@Luckie
Auch erstmal danke für die Beteiligung! hab ich gerade mal versucht. Musste dann allerdings noch zusätzlich Zeile 67 und 12 löschen. Allerdings kommt dann die Meldung "Netzwerkkabel ist ausgesteckt" obwohl es doch eingesteckt ist. Getestet momentan mit WinXP SP2.
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#95

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 26. Mai 2008, 08:56
hoi,

wahrscheinlich liefert die Funktion immer 'False'
weil bei dir in der Registry der Parameter 'DHCPDomain'
gar nicht existiert bei deinem netzwerk-adapter


cya
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#96

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 26. Mai 2008, 09:11
Also der Parameter ist vorhanden. Habe fünf Ordner im Registryordner "Interfaces" und in einem dieser ist mein LAN-Adapter mit sämtlichen DHCP-Einstellungen sowie 'DHCPDomain' vorhanden. Sollte doch eigentlich so stimmen, oder?
Habe auch schon versucht die IP manuell zu vergeben, weil ich mir dachte dass diese Abfrage nur für aktiviertes DHCP gilt. Allerdings kommt hier auch wieder LAN-Kabel nicht gesteckt.
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#97

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 28. Mai 2008, 11:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von spaxxn
spaxxn

Registriert seit: 19. Nov 2004
253 Beiträge
 
Delphi XE2 Enterprise
 
#98

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 28. Mai 2008, 11:26
Binde mal die Units "ComObj" und "ActiveX" ein
  Mit Zitat antworten Zitat
Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#99

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 28. Mai 2008, 11:51
Danke spaxxn das wars. Jetzt hängt es allerdings beim Aufrufen der procedure
Zitat:
[Pascal Fehler] Unit1.pas(15): E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.ShowNetworkStatus'
Bin noch bissi frisch hinter den Ohren, sodass es wohl zu 99% ein Syntaxfehler sein wird.

Edit: Ok habe es dann doch selbst entdeckt hatte statt procedure xxx.yyyy nur procedure yyyy stehen gehabt.
  Mit Zitat antworten Zitat
Benutzerbild von spaxxn
spaxxn

Registriert seit: 19. Nov 2004
253 Beiträge
 
Delphi XE2 Enterprise
 
#100

Re: Feststellen, ob Netzwerkkabel gezogen wurde?

  Alt 28. Mai 2008, 11:57
Edit: Ich schlaf noch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 10 von 11   « Erste     8910 11      


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 10:49 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