Namen eines Netzwerkgerätes auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

bobobo hat geschrieben:Richtig lustig wird's erst, wenn Du merkst, dass Deine angestrebte
Lösung kein Deut schneller ist als die normale per netsh. :)
Nur so zur Info: Ich möchte (bzw. muss) jetzt netsh benutzen. Beim Übernehmen der Einstellungen braucht man auch den relativen (user-definierbaren) Namen des Netzwerkgerätes, dass man verändern möchte. Deshalb habe ich diesen Thread aufgemacht.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

achso .. ja ..


ää ..netsh interface dump erzeugt nach stdout ne Liste in der unter
anderem auch der Name steht

Code: Alles auswählen

NewList netzgeraete.s()
s.s=""

Enumeration
#WIN
#COMBO
EndEnumeration

OpenWindow(#WIN,0,0,200,200,"Netzgeräte Auswahl (aktive)",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#WIN))
ComboBoxGadget(#COMBO,0,0,200,200)
ListViewGadget(#COMBO,0,0,200,200)

prog.l= RunProgram("netsh","interface dump","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
While ProgramRunning(prog)
  cc+1
  If cc>7000
    s+"|"
    ;nur ne Anzeige das sich was tut
    AddGadgetItem(#COMBO,0,s)
    SetGadgetState(#COMBO,0)
    While WindowEvent():Wend
    cc=0
  EndIf
  If AvailableProgramOutput(Prog)
    tmp.s=ReadProgramString(prog)
    If FindString(tmp,"name=",0)
      AddElement(netzgeraete())
      ng.s=StringField(tmp,2,Chr(34))
      netzgeraete.s()=ng
    EndIf
    ausgabe.s+tmp +#CRLF$
  EndIf
Wend
CloseProgram(prog)
SortList(netzgeraete(),2)
ResetList(netzgeraete()) ; doppelte raushauen
While NextElement(netzgeraete())
  If nga.s=netzgeraete()
    DeleteElement(netzgeraete())
  EndIf
  nga.s=netzgeraete()
Wend
ClearGadgetItemList(#COMBO)
ForEach netzgeraete()
  AddGadgetItem(#COMBO,-1,netzgeraete())
Next
SetGadgetState(#COMBO,0)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow


und "netsh interface show interface" liefert direkt ne Liste der Geräte
(peinlich :oops: )
allerdings ist die Liste aus dem Code oben eventuell besser geeignet,
da dort nur die aktiven Netzgeräte gelistet werden
Zuletzt geändert von bobobo am 20.04.2007 10:27, insgesamt 1-mal geändert.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

bobobo hat geschrieben: und "netsh interface show interface" liefert direkt ne Liste der Geräte
(peinlich :oops: )
Eben nicht peinlich :oops: ! Ich kann den Benutzer nicht auffordern, dass was da steht zeichengenau abzutippen!
wie z.B.: hier

Bitte geben Sie nun ja ein, da sie das Programm noch nicht gekauft haben:

Benutzen Sie die Demo Version? [Eingabefeld]
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Eben nicht peinlich Embarassed ! Ich kann den Benutzer nicht auffordern, dass was da steht zeichengenau abzutippen!
netsh aufrufen -> Ausgabe parsen ... was ist daran so schwer ? :)

Thalius
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Ausgabe parsen??? Was ist das, wie geht es? ich bin (noch) kein pro!
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

sowas wie Parsen macht doch mein Code oben. (ist etwas angepasst)

Parsen --> Lesbar ausgeben


(Beachte, dass es mehrere Netzwerkgeräte geben kann.)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

bei bobobo's code werden aber nur 2 Netzwerkgeräte angezeigt:
Bild

ich habe aber diese hier:

Bild
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

in "meinem" Code werden die aktiven Geräte angezeigt, also die auch
tatsächliche ne Verbindung haben. (*)

Für ne Auflistung aller Geräte lautet der netsh-Befehl

netsh interface show interface

lauten . Und die nachfolgende Bearbeitung müsste dann auch noch
entsprechend der Ausgabe daran angepasst werden.

(*) so isses zumindest bei mir.

hier der angepasste Code nebst angepasster Parserei

Code: Alles auswählen

NewList netzgeraete.s()
s.s=""

Enumeration
#WIN
#COMBO
EndEnumeration

OpenWindow(#WIN,0,0,200,200,"Netzgeräte Auswahl (aktive)",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#WIN))
ComboBoxGadget(#COMBO,0,0,200,200)
ListViewGadget(#COMBO,0,0,200,200)

prog.l= RunProgram("netsh","interface show interface","",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
While ProgramRunning(prog)
  cc+1
  If cc>7000
    s+"|"
    ;nur ne Anzeige das sich was tut
    AddGadgetItem(#COMBO,0,s)
    SetGadgetState(#COMBO,0)
    While WindowEvent():Wend
    cc=0
  EndIf
  If AvailableProgramOutput(prog)
    tmp.s=ReadProgramString(prog)
    Debug tmp
    If FindString(tmp,"Aktiviert",0)
      tmp=Mid(tmp,48,Len(tmp)-47)
      AddElement(netzgeraete())
      ng.s=tmp
      netzgeraete.s()=ng
    EndIf
    ausgabe.s+tmp +#CRLF$
  EndIf
Wend
CloseProgram(prog)
SortList(netzgeraete(),2)
ResetList(netzgeraete()) ; doppelte raushauen
While NextElement(netzgeraete())
  If nga.s=netzgeraete()
    DeleteElement(netzgeraete())
  EndIf
  nga.s=netzgeraete()
Wend
ClearGadgetItemList(#COMBO)
ForEach netzgeraete()
  AddGadgetItem(#COMBO,-1,netzgeraete())
Next
SetGadgetState(#COMBO,0)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

aber wie du oben im 2. Bild sehen kannst, hat die Lan-Verbindung auch keine Internetverbindung (Netzwerkkabel wurde entfernt)
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

seh ich wohl .. aktiv heisst dann wohl, dass ne IPNummer vergeben
ist und das Gerät könnte, wenn n Kabel drinstecken würde.


ich weiß aber auch nur wie es hier(*) funktioniert.

Mit Methode 1 bekomme ich die Anzeige der Geräte mit Verbindung (Bei
mir ist das eben meist genau die eine und switchbar 'n virtuelles VMWare-
Gerät) und mit Methode 2 ne Liste der Gerätschaften die könnten aber
nicht müssen.

(*) "hier" ist ne Domänenumgebung in der Firma
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten