goodbytes
Goto Top

VB6 - Call mit Variable (Ausgangspunkt)

Hallo,
mittlerweile läuft meine Anwendung ganz gut. Aber wie es so ist, man möchte sie ja immer optimieren und möglichst universell weiterentwickeln.

Zum Hintergrund:
Ich nutze mein Netbook (oder manchmal mein Notebook) sehr oft unterwegs mit der Bahn. Leider sind die Ressourcen des Akkus nun einmal beschränkt.

Deshalb bin ich der Meinung, bestimmte Dienste, welche unnötig Akkuressourcen verbrauchen, erst einmal auf "Manuell" zu stellen. Starten kann ich sie ja immer noch, wenn ich sie benötige (natürlich auch danach wieder beenden).

Auf die Laufzeit des Akkus hat es sich auf jeden Fall sehr positiv ausgewirkt, auch auf die Geschwindigkeit beim starten. Eigentlich ja auch logisch.

Nun habe ich mir mittels VB6 einfach eine kleine Combobox, welche in der rechten oberen Bildschirmecke erscheint, gebastelt.

Hier kann ich nun festlegen, ob ich nun doch alles was Netzwerk betrifft ein oder ausschalten möchte mit einem kurzen Klick.

Man muss natürlich in der Reihenfolge des Startens bzw. Beendens von Diensten die Abhängigkeiten untereinander beachten. Wichtig ist mir dann natürlich auch, dass ich beim Akltivieren der Netzwerkeigenschaften auch den Virenscanner und die Firewall mit starte.

Funktioniert auch ganz gut.

Nun zur Umsetzung und meinen Fragen:
Mit einem Click-Ereignis innerhalb meiner Combobox durchläuft das Sub natürlich alle If-Abfragen, damit es weiß, was ich gerade möchte. Dazu habe ich die Public-Variable "Dienst" definiert und definiere sie vor jeder If-Abrage neu mit dem Namen des gerade gewünschten Dienstes.

Danach kommt ein Call-Aufruf an ein privates Sub (könnte man natürlich je genauso als Funktion machen, aber ich denke, dass dies eigentlich ohnehin egal ist, oder?).

Im privaten Sub wird nun mittels Case nun geprüft ob der Dienst schon läuft oder nicht. Entsprechend kommt dann halt der Versuch den Dienst zu starten oder zu beenden (es handelt sich je um ein Sub zum beenden bzw. starten).

Nach der Prüfung wird entweder das starten oder beenden ausgelöst, Err ausgewertet (Zähler um 1 hochsetzen), und dann gehts zurück. Und so weiter und so weiter...
Zum Schlus dann halt eine Info ob erfolgreich oder mit wie vielen Fehlern beendet.

Momentan sind es bei manchen Geschichten schon bis zu 18 Diensten, welche ich in der richtigen Reihenfolge starten / beenden möchte.

So, nun zu meinen laienhaften Fragen...

Kann ich beim Aufruf mittels "Call" dem "Call" irgendwie einen Variableninhalt als String übergeben? Ich möchte vor dem jeweiligen If-Anfang einfach die private Subroutine als String übergeben (spart ja dann viel Arbeit, da man viel kopieren kann)

Ich möchte die endgültige exe einfach flexibel halten, damit ich jederzeit was hinzufügen kann ohne VB6 anzuwerfen un die gaze Geschichte neu zu kompilieren. Sehr gerne möchte ich die Ergebnisse dann auch allen anderen (natürlich kostenlos) zur Verfügung stellen. Eigentlich hat ja jeder, der sein Notebook intensiv nutzt das Problem der begrenzten Akkudauer. Hier könnten meine Erfahrungen der notwendigen Dienste (bzw. untereinander abhängigen Dienste) jedem helfen.

Im Prinzip wäre es das Einfachste, wenn man eine relativ flexible exe erstellen könnte, welche sich die Infos aus einer zugehörigen ini-Datei holt.

Und genau hier sehe ich das Problem. Ich muss meine exe so gestalten, dass sie bei der Auswahl eines Eintrags aus der Combobox in die ini-Datei unter dem entsprechenden Eintrag "[WLAN ein]" nachschaut wie viele Positionen darunter erscheinen und diese dann der Reihe nach abarbeitet. Somit könnte jeder einfache Einträge in dieser ini-Datei hinzufügen (natürlich unter dem korrekten Dienstnamen und unter Berücksichtigung der Abhängigkeiten).

Ich denke mal, gerade in der heutigen Zeit, wo wir alle mit unseren Notebooks, welche mit Diensten nur so überladen sind, wäre das keine schlechte Idee?

Aber ich habe ein bissl meine Probleme mit den eben genannten Sachen. Wenn mir jemand dabei helfen könnte wäre es toll.

Ich möchte dann gerne den fertigen zusammengebastelten Code hier als Anleitung für alle posten, da, wie ich denke, sich sehr viele dafür interessieren würden.

Gruß
Torsten

Content-Key: 180268

Url: https://administrator.de/contentid/180268

Printed on: April 23, 2024 at 22:04 o'clock

Member: bastla
bastla Feb 08, 2012 at 21:13:43 (UTC)
Goto Top
Hallo TorstenB!

VB6 habe ich nicht zur Verfügung, und Deinen Code kann ich mir auch nur vorstellen, aber als grundsätzliche Überlegung: ini-Datei beim Start des Programms einlesen und die jeweilige Dienstliste in ein Array oder Dictionary packen ...

Grüße
bastla
Member: Tommy70
Tommy70 Feb 09, 2012 at 06:05:18 (UTC)
Goto Top
Hallo,

ich kann mir ungefähr vorstellen was du willst.

1. Ja, du kannst einer Sub eine Variable übergeben.
Private Sub Test (strTest as String)
	msgbox strTest
End Sub

Call Test "Hallo"  

2. Und die Sache mit der Ini.
Schau dir mal das an.
Dort ist schön beschrieben wie du alle Sectionen und auch alle Werte pro Section aus einer Ini auslesen kannst.
Member: goodbytes
goodbytes Feb 09, 2012 at 08:26:02 (UTC)
Goto Top
Hallo Tommy,
nein ich meinte eigentlich, dass der Name der Sub als String in einer Variable steckt.

Zur Verdeutlichung:

Dim MeineVariable As String

MeineVariable = "BlaBlaBla"  

Call Meine Variable

Aber der Link auf den sehr ausführlichen ini-Artikel war super!

Wenn ich die zu startenden oder zu beendenden Dienste nun in einer ini in den verschiedenen Bereichen habe brauche ich die Sache mit dieser Variablen eigentlich nicht mehr.

@bastla
Also wie das mit ini-Dateien funktioniert ist ja dann klar.
Wie bekomme ich es aber nun hin, dass mir bei Auswahl einer Option der Combobox nun die Anzahl der Einträge und dann auch noch die Inhalte des bestimmten Bereiches zurückgegeben wird. Du sagtest etwas von Array bzw. Dictonary...
Da kenne ich mich aber leider nicht so gut aus.

Ich möchte praktisch in meinem Sub eine For ... Next-Schleife verwenden und benotige dazu die Anzahl der Einträge des entsprechenden Bereiches in der ini als Zähler. Bei jedem Durchlauf soll praktisch meine Variable "Dienst" mit dem nächsten Wert befüllt werden.

Danke euch Beiden schon mal für eure Hilfe !!! face-smile

Gruß
Torsten
Member: Tommy70
Tommy70 Feb 09, 2012 at 08:40:21 (UTC)
Goto Top
Zitat von @goodbytes:
Hallo Tommy,
nein ich meinte eigentlich, dass der Name der Sub als String in einer Variable steckt.

Zur Verdeutlichung:

> Dim MeineVariable As String
> 
> MeineVariable = "BlaBlaBla"  
> 
> Call Meine Variable
> 

Auch das geht. Allerdings muss es die Prozedur mit dem Namen so auch geben. Und genau das wolltest du ja glaube ich vermeiden. Link

Und das andere geht, indem du dir in die Combobox erstmal die ganzen Sectionen der Ini einliest.
Wird dann ein Wert ausgewählt, liest du ensprechend meinem vorhergehendem Link die einzelnen Einträge mittels GetIniString in eine Variable (nennen wir sie strTest) und erstellst anschließend mittels Test=Split(strTest, Chr$(0)) ein Array mit den Einträgen. Die genau Anzahl der Einträge kannst du dann mittels Ubound(Test) abfragen
Aber schau dir Punkt 3 auf der Seite mit den Ini-beispielen an. Das sollte genau das sein was du brauchst.
Member: goodbytes
goodbytes Feb 09, 2012 at 09:56:21 (UTC)
Goto Top
Hallo Tommy70,
ok, ich werde es dann heute abend mal probieren und gebe dann Feedback.

Danke!

Gruß
Torsten
Member: goodbytes
goodbytes Feb 14, 2012 at 11:05:28 (UTC)
Goto Top
Hallo,

das Auslesen der Abschnitte der ini-Datei, sowie der Untereinträge und der Werte der Untereinträge funktioniert jetzt bestens.

Hier die Beispiel-ini:

[Eintrag1]
ErsterEintrag=MeinWert1
ZweiterEintrag=Mein Wert2

[Eintrag2]
...

Die benötigten Funktionen "GetIniString" und "GetPrivateProfileString" habe ich entsprechend dem von Tommy geposteten Link in ein Modul gepackt.

Hier nun die Zeilen zum Auslesen der Daten aus der ini-Datei:

Dim Section As String, Key As String, KeyData As String

' Abschnitt  
Section = GetIniString(vbNullString, "", "", INIFile, 32767)  

' Eintrag im Abschnitt      
Key = GetIniString(Section, vbNullString, "", INIFile, 32767)  

' Wert des Eintrags  
KeyData = GetIniString("", "", vbNullString, INIFile, 32767)  

Nun muss ich nur noch Alles in eine Schleife einpacken und das war`s.

Vielen Dank für eure Hilfe und vor Allem für den wertvollen Link !!! face-smile

Gruß
Torsten