![]() |
Netzwerkstatus abfragen
Hallo zusammen,
ich möchte ein Programm schreiben, welches den Status eines (im Hintergrund laufenden) Netzwerkadapters/-gerätes periodisch abfragt. Bsp.: Ich habe ein Netzwerkgerät "Ethernet 3 - Internet", von dem ich periodisch wissen möchte, ob es aktiv ist oder nicht. In den Statuseigenschaften dieses Adapters sehe ich unter "Medienstatus" bspw."aktiviert". Vermutlich würde es reichen, diesen Medienstatus abzufragen. Weiß evtl. jemand, ob bzw. wie das programmatisch umsetzbar wäre? Über Hinweise würde ich mich freuen. Danke! |
AW: Netzwerkstatus abfragen
Als Startpunkt:
![]() |
AW: Netzwerkstatus abfragen
Ich hätte es über PowerShell-Commands gelöst.
ChatGPT schlägt folgendes vor:
Code:
Erfolgreich getestet mit meinem Adapter.
Get-NetAdapter -InterfaceAlias "Ethernet 3 - Internet" | Select-Object InterfaceAlias, MediaConnectionState
Die Ausgabe kann man sich ja in Delphi zurückliefern lassen. |
AW: Netzwerkstatus abfragen
@kratos: Was muss ich lernen um sowas zu wissen?
PowerShell ? WSH ? ActiveDirectory ? Wie heißt diese Magie und kannst du ein Grimoire empfehlen im sie zu lernen? |
AW: Netzwerkstatus abfragen
Habe spasseshalber mal den Chatbot meiner Wahl interviewt, dabei ist dashier herausgekommen:
Zitat:
Zitat:
Delphi-Quellcode:
unit GetIf;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const MAX_INTERFACE_NAME_LEN = $100; // maximale Länge Name des Interfaces MAXLEN_PHYSADDR = 8; // maximale Länge der physischen Adresse MAXLEN_IFDESCR = $100; // maximale Länge Beschreibung des Int. type TMIB_IFROW = record wszName : array [0 .. (MAX_INTERFACE_NAME_LEN*2-1)] of char; dwIndex : cardinal; // index of the interface dwType : Longint ; // type of interface dwMtu : Longint ; // max transmission unit dwSpeed : Longint ; // speed of the interface dwPhysAddrLen : Longint ; // length of physical address bPhysAddr : array [0 .. (MAXLEN_PHYSADDR-1)] of byte ; // physical address of adapter dwAdminStatus : Longint ; // administrative status // ... // Weitere Felder können hinzugefügt werden, um zusätzliche Informationen zu erhalten end; implementation // Hier können Sie die Funktionen GetIfTable und GetIfEntry aufrufen, um den Status des Netzwerkadapters abzurufen end. Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
unit GetIf;
interface uses Windows, SysUtils; type PMIB_IFROW = ^MIB_IFROW; MIB_IFROW = packed record wszName: array[0..MAX_INTERFACE_NAME_LEN * 2 - 1] of WideChar; dwIndex: DWORD; dwType: DWORD; dwMtu: DWORD; dwSpeed: DWORD; dwPhysAddrLen: DWORD; bPhysAddr: array[0..MAXLEN_PHYSADDR - 1] of BYTE; dwAdminStatus: DWORD; dwOperStatus: DWORD; dwLastChange: DWORD; dwInOctets: DWORD; dwInUcastPkts: DWORD; dwInNUcastPkts: DWORD; dwInDiscards: DWORD; dwInErrors: DWORD; dwInUnknownProtos: DWORD; dwOutOctets: DWORD; dwOutUcastPkts: DWORD; dwOutNUcastPkts: DWORD; dwOutDiscards: DWORD; dwOutErrors: DWORD; dwOutQLen: DWORD; dwDescrLen: DWORD; bDescr: array[0..MAXLEN_IFDESCR - 1] of AnsiChar; end; function GetIfEntry(pIfRow: PMIB_IFROW): DWORD; stdcall; external 'IPHLPAPI.DLL'; function GetIfTable(pIfTable: Pointer; var pdwSize: ULONG; bOrder: BOOL): ULONG; stdcall; external 'IPHLPAPI.DLL'; implementation end. Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
unit MainForm;
interface uses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls, GetIf; type TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var IfRow: MIB_IFROW; begin ZeroMemory(@IfRow, SizeOf(IfRow)); IfRow.dwIndex := 1; // Setzen Sie hier den Index Ihres Netzwerkadapters ein if GetIfEntry(@IfRow) = NO_ERROR then begin Memo1.Lines.Add('Status: ' + IntToStr(IfRow.dwOperStatus)); end else begin Memo1.Lines.Add('Fehler beim Abrufen des Netzwerkstatus'); end; end; end. Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
unit MainForm;
interface uses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls, GetIf; type TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var pIfTable: PMIB_IFTABLE; dwSize: ULONG; i: Integer; IfRow: MIB_IFROW; begin dwSize := 0; GetIfTable(nil, dwSize, False); // Erster Aufruf, um die benötigte Größe zu ermitteln GetMem(pIfTable, dwSize); try if GetIfTable(pIfTable, dwSize, True) = NO_ERROR then // Zweiter Aufruf, um die Daten zu erhalten begin for i := 0 to pIfTable^.dwNumEntries - 1 do begin ZeroMemory(@IfRow, SizeOf(IfRow)); IfRow.dwIndex := pIfTable^.table[i].dwIndex; if GetIfEntry(@IfRow) = NO_ERROR then begin Memo1.Lines.Add('Adapter ' + IntToStr(i) + ': ' + 'Status: ' + IntToStr(IfRow.dwOperStatus)); end else begin Memo1.Lines.Add('Fehler beim Abrufen des Netzwerkstatus'); end; end; end; finally FreeMem(pIfTable); end; end; end. Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
unit MainForm;
interface uses Windows, SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls, Grids, GetIf; type TForm1 = class(TForm) StringGrid1: TStringGrid; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var pIfTable: PMIB_IFTABLE; dwSize: ULONG; i: Integer; IfRow: MIB_IFROW; begin dwSize := 0; GetIfTable(nil, dwSize, False); // Erster Aufruf, um die benötigte Größe zu ermitteln GetMem(pIfTable, dwSize); try if GetIfTable(pIfTable, dwSize, True) = NO_ERROR then // Zweiter Aufruf, um die Daten zu erhalten begin StringGrid1.RowCount := pIfTable^.dwNumEntries + 1; // +1 für die Überschrift StringGrid1.Cells[0, 0] := 'Adapter'; StringGrid1.Cells[1, 0] := 'Status'; for i := 0 to pIfTable^.dwNumEntries - 1 do begin ZeroMemory(@IfRow, SizeOf(IfRow)); IfRow.dwIndex := pIfTable^.table[i].dwIndex; if GetIfEntry(@IfRow) = NO_ERROR then begin StringGrid1.Cells[0, i + 1] := 'Adapter ' + IntToStr(i); StringGrid1.Cells[1, i + 1] := 'Status: ' + IntToStr(IfRow.dwOperStatus); end else begin StringGrid1.Cells[0, i + 1] := 'Adapter ' + IntToStr(i); StringGrid1.Cells[1, i + 1] := 'Fehler beim Abrufen des Netzwerkstatus'; end; end; end; finally FreeMem(pIfTable); end; end; end. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz