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

)
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

)
Eben nicht peinlich

! 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:
ich habe aber diese hier:

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