Seite 1 von 1
Leerzeichen mit ProgramParameter()?
Verfasst: 16.05.2007 17:22
von PureBasic4.0
Hi, Leute
Ich habe folgendes Problem mit CountGadgetItems():
Hier der Code:
Code: Alles auswählen
a = 0
Anzahl = CountGadgetItems(#Device)
For a = 0 To Anzahl
Text$ = GetGadgetItemText(#Device,a,0)
Debug "Eintrag "+Str(a)+"; "+Text$
If LCase(SavedDevice$) = LCase(Text$)
SetGadgetState(#Device,a)
SetGadgetState(#Verk_Netzwerkg,a)
Break
EndIf
Next
Es wird folgendes in der Debug-Ausgabe angezeigt:
In der Liste #Device wird aber folgendes angezeigt:
Was mache ich falsch? Ist das vielleicht ein Bug?
Ich weiß, dass das ComboGadget #Device heißt! Ist kein eventueller Tippfehler.
Verfasst: 16.05.2007 17:53
von PureLust
2 Dinge:
1. Deine Schleife muss bis "Anzahl-1" laufen und nicht bis "Anzahl", da die Items-Nummern bereits bei 0 beginnen und die Schleife bei einer Anzahl von 3 also nur von 0-2 laufen muss.
2. Das "Break" dürfte Dein Problem sein, da es vermutlich zu früh die Schleife beendet.
[Nachtrag:] Mach zusätzlich nach dem bestehenden Debug mal ein Debug LCase(SavedDevice$)+" = "+LCase(Text$) rein, dann solltest Du sehen, warum er die Schleife beendet und sie nicht bis zuende ausführt.
Gruß, PL.
Verfasst: 16.05.2007 17:55
von Fluid Byte
1. Deine Schleife muss bis "Anzahl-1" laufen und nicht bis "Anzahl", da die Items-Nummern bereits bei 0 beginnen und die
Muss sie nicht. Macht nur Sinn um den Leerreintrag nicht anzuzeigen. Denn er bekommt nicht zu viel Items sondern zu wenig.
Wo kriegst du die Liste der Adapter her? Können wir mal den ganzen Code sehen?
Verfasst: 16.05.2007 19:17
von PureBasic4.0
ok. vergesst es. ich hab nur in dem 900 zeilen code den überblick verloren. ein paar zeilen darunter war noch so ein ding und das hat das prog irritiert.
Aber etwas habe ich noch: Wie kann ich im ProgramParameter() Leerzeichen übergeben ohne extra den Index verwenden zu müssen?
//Edit: Ich werde den Titel jetzt ändern
Fluid Byte hat geschrieben:
Wo kriegst du die Liste der Adapter her? Können wir mal den ganzen Code sehen?
@Fluid Byte: Wenn mein Prog fertig ist, stelle ich den gesamten Sourcecode auf meine (nicht designte) HP. Hier ist der Code, mit dem man die Liste der Adapter bekommt:
Code: Alles auswählen
; Es wird WMI benutzt. Irgendwo hier im Board gibt es einen Thread, in dem man die WMI.pbi bekommt
wmi_init()
WMI_Call("SELECT * FROM Win32_NetworkAdapter", "NetConnectionID, Index, MACAddress")
ResetList(wmidata())
While NextElement(wmidata())
AddElement(ConfigNet())
ConfigNet()\NetConnectID=wmidata()
NextElement(wmidata())
ConfigNet()\Index=wmidata()
NextElement(wmidata())
ConfigNet()\MACAddress=wmidata()
Wend
wmi_release("OK")
ClearList(wmidata())
ResetList(ConfigNet())
wmi_init()
WMI_Call("SELECT * FROM Win32_NetworkAdapterConfiguration", "IPAddress,Description,SettingID")
ResetList(wmidata())
NextElement(wmidata())
While NextElement(ConfigNet())
ConfigNet()\IPAdress=wmidata()
NextElement(wmidata())
ConfigNet()\Description=wmidata()
NextElement(wmidata())
ConfigNet()\SettingID=wmidata()
NextElement(wmidata())
Wend
While NextElement(ConfigNet())
If ConfigNet()\NetConnectID <> "n/a"
AddElement(Devices())
Devices()\Name = ConfigNet()\NetConnectID
Devices()\Realname = ConfigNet()\Description
Devices()\Handle = ConfigNet()\SettingID
Devices()\Activity = ConfigNet()\MacAddress ; Ich weiß, dass diese Zeile unnötig ist. Wenn man aber ConfigNet()\MacAddress in einen IF-Block setzt, gibt es einen Fehler in der wmi.pbi (Invaild Memory Access)!
Delay(10) ; Lassen wir der wmi.pbi ein bisschen Zeit...
Devices()\MacAddr = ConfigNet()\MacAddress
If Devices()\Activity = "n/a"
Devices()\Activity = "Deaktiviert"
Else
Devices()\Activity = "Aktiviert"
EndIf
AddGadgetItem(#Device,deviceanzahl,Devices()\Realname) ; Das hier ist die Liste der Adapter
AddGadgetItem(#Verk_Netzwerkg,deviceanzahl,Devices()\Realname)
deviceanzahl + 1
EndIf
Wend
Dieser Code ist für euch jetzt wahrscheinlich "nicht sauber", aber ich habe gerade keine Zeit, alles irrelevante herauszulöschen.