Seite 2 von 4

Verfasst: 17.04.2007 16:31
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.

Verfasst: 17.04.2007 21:56
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

Verfasst: 19.04.2007 15:16
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]

Verfasst: 19.04.2007 16:57
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

Verfasst: 19.04.2007 17:12
von PureBasic4.0
Ausgabe parsen??? Was ist das, wie geht es? ich bin (noch) kein pro!

Verfasst: 20.04.2007 10:08
von bobobo
sowas wie Parsen macht doch mein Code oben. (ist etwas angepasst)

Parsen --> Lesbar ausgeben


(Beachte, dass es mehrere Netzwerkgeräte geben kann.)

Verfasst: 20.04.2007 19:02
von PureBasic4.0
bei bobobo's code werden aber nur 2 Netzwerkgeräte angezeigt:
Bild

ich habe aber diese hier:

Bild

Verfasst: 23.04.2007 12:51
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

Verfasst: 23.04.2007 17:39
von PureBasic4.0
aber wie du oben im 2. Bild sehen kannst, hat die Lan-Verbindung auch keine Internetverbindung (Netzwerkkabel wurde entfernt)

Verfasst: 23.04.2007 18:25
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