Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials
Autor
Nachricht
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421

Builder programmieren für Anfänger
Verfasst am: 15.06.2009, 12:20

Thema: Wie programmiert man sich einen Builder.


Hallo an alle.

Heute erkläre ich euch was ein Builder ist und wie man sich seinen eigenen codet.


1. Was ist ein Builder und wozu braucht man den???

Ein Builder bietet einem die Möglichkeit Einstellungen an einer schon kompilierten Datei vorzunehmen.
Versteht das jetzt bitte nicht falsch. Man greift nicht wirklich in die exe Datei ein, sondern man hängt an die Datei die Informationen dran.
Die Exe muss natürlich dann so programmiert sein, dass sie sich diese Infos die sie benötigt auch holen kann.
Ihr könnt das also nicht mit jeder Exe machen, sondern es muss diese auch eine von euch programmierte sein.

2. Grundfunktion

Ich hab ja schon ein wenig angeschnitten wie ein Builder funktioniert, aber jetzt versuch ich es mal genauer zu erklären.

Als erstes besteht so ein Projekt aus zwei Programmen. Den Builder und das eigentliche Programm, das der Benutzer auf seine Bedürfnisse einstellen kann.

Also wie funktioniert das jetzt?

Im Builder werden normal Angaben gemacht, die euer Programm braucht, wie zum Beispiel die IP Adresse zu der er verbinden soll, oder Port, Installationspfad, Autostarteintrag und diverse andere.
Beim erstellen öffnet der Builder den Programm und fügt am Ende der Datei all diese Informationen dran. Am besten natürlich irgendwie verschlüsselt, da man sonst einfach per Hexeditor die Daten auslesen kann.

Nun gibt es zwei Möglichkeiten wie der Builder auf das Programm zugreift.
Beide werde ich hier erörtern.

3. Programm direkt im Builder als Ressource einbinden.

Vorteil dieser Art ist, dass man am Ende nur eine Datei hat, da der Programm in den Builder eingebunden wird.

Als erstes braucht ihr dazu den Ressourcen Editor.
Den bekommt ihr, wenn ihr oben auf Add-Ins => Add-In-Manager drückt und dann den Eintrag VB 6 Ressourcen-Editor sucht und markiert.
Unten hakt ihr dann diese zwei Optionen an: Beim Start laden und Laden/Entladen.
Nachdem ihr OK gedrückt habt, müsstet ihr jetzt oben ein neues Zeichen dazubekommen haben.

Falls ihr es nicht findet, dann drückt einfach auf Extras => Ressourcen-Editor.

Jetzt habt ihr also ein neues Fenster, den Ressourcen-Editor offen.
Nun sucht ihr das Icon für Benutzerdefinierte Ressourcen, das ganz rechts vor dem Fragezeichen ist und drückt drauf.
Fügt nun eure Exe Datei ein.

Diese Datei sollte jetzt mit der Nummer 101 eingefügt sein, da es die erste ist, die ihr eingefügt habt.

Jetzt ist es wichtig, das ihr im Ressourcen-Editor auf speichern drückt.
Dann könnt ihr ihn schließen.

So. Und hier nun ein Beispiel zum entpacken der Ressource.

4. Ressource entpacken
Code:
Dim buffer() As Byte<br />buffer = LoadResData(101, "CUSTOM")<br />Open fout For Binary As #1<br />Put #1, , buffer<br />Close #1
Ich erklär euch den code Zeile für Zeile.

Code:
Dim buffer() As Byte
Wir deklarieren also erstmal die Variable buffer as Byte, in der wir dann die Ressource speichern um sie dann auf der Festplatte erstellen zu können.


Code:
buffer = LoadResData(101, "CUSTOM")
In der zweiten Zeile laden wir die Ressource Nummer 101 in buffer.
„CUSTOM“ gibt an welche Art von Ressource das ist, und es ist ja eine Benutzerdefinierte.


Code:
Open (App.Path & "Programm.exe")  For Binary As #1
Hier öffnen wir nun die Datei, außer sie existiert noch nicht, dann wird sie erstellt.
Das ganze passiert im Binär Modus und ich habe hier die Nummer #1 gewählt für diese Datei.
Wenn ihr euch damit nicht auskennt, dann solltet ihr euch zuerst über dieses Thema informieren, bevor ihr weiterlest.
Was bedeutet (App.Path & "Programm.exe") ???
Ganz einfach. App.Path übergibt den Pfad wo der Builder gespeichert ist und wir fügen dann einfach noch Programm.exe dran und haben so schon den kompletten Pfad zu der Datei.


Code:
Put #1, , buffer()
Mit dieser Zeile fügen wir in die Datei mit der Nummer #1, die Ressource Datei ein, die wir in buffer gespeichert haben ein.

Code:
Close #1
Hiermit wird der Zugriff auf die Datei wieder beendet/geschlossen.
Das ist sehr wichtig, dass man Dateien die man nicht mehr benutzt auch wieder freigibt.
Hier wird jetzt nur die Datei #1 geschlossen, aber wenn ihr mehrere auf einmal schließen wollt, braucht ihr nur close schreiben.

5. Eingegebene Informationen/Optionen an den Programm hängen

Als Beispiel benutze ich jetzt einfach mal Text1.Text und Text2.Text, in denen Infos wie IP und Port angegeben werden können.

Code:
Dim options As String * 100<br />Options = Text1.Text & "#" & Text2.Text & "#"
In der ersten Zeile deklarieren wir uns erstmal eine Variable in der wir dann alle Angaben die der Benutzer gemacht hat speichern können.
Aber was ist das * 100???
Hier bestimmen wir, dass die Variable options genau 100Bytes lang ist.

Versucht euch das so vorzustellen, das options ein Koffer ist, indem ihr 100 Sachen reinpacken könnt.
Wenn ihr sehr viele Informationen reinpacken wollt, kann es sein, das euer Koffer zu klein ist.
Das ist aber kein Problem. Ihr müßt dann halt nur eine größere Zahl hinschreiben.

In 100Bytes passt aber schon sehr viel hinein.


2. Zeile
Code:
Options = Text1.Text & "#" & Text2.Text & "#"
In dieser Zeile speichern wir alle Informationen die der Benutzer angegeben hat in der Variable options.
Aber wie ihr vielleicht schon gesehen habt, sind da noch andere Zeichen zwischen Text1.Text und Text2.Text.
Diese dienen uns als Trennungszeichen, damit wir später diese Infos wieder voneinander trennen können. Ihr könnt auch andere Zeichen wählen, aber nehmt welche, wo ihr euch sicher seit, dass sie nicht in den vom Benutzer angegebenen Informationen vorkommen werden.

Nun brauchen wir noch den code zum anhängen dieser Informationen an den Programm.

6. Informationen an den Programm anhängen

Code:
Open (App.Path & "Programm.exe")  For Binary As #1<br />Put #1, LOF(1) + 1, options<br />Close #1
In der ersten Zeile öffnen wir nochmal die Datei die wir vorher schon erstellt haben.
In der zweiten Zeile fügen wir die Infos, die in options gespeichert sind, ans Ende der Datei.
Jetzt fragt ihr euch vielleicht woher unser code weiß wo das Ende der Datei ist.
Das sagen wir ihm über den Befehl LOF(1)+1).
LOF bedeutet Len Of File.
In der Klammer steht die Zahl 1. Das ist die Nummer der Datei.

Wir sagen also (Länge der Datei 1)+1).
Plus 1 schreiben wir deshalb, weil er sonst das letzte Zeichen der Datei überschreiben würde mit unseren Infos. Also sagen wir plus eins.
Mit Close #1 wird die Datei dann wieder geschlossen.

Das wäre auch schon der ganze Basiscode für einen Builder.


Aber ich zeige euch noch die Möglichkeit eine externe Datei, die man normal als stub bezeichnet, zu öffnen und eure infos dranzuhängen.

7. Externe Stub öffnen und String anhängen

Eigentlich ist nur wichtig, wie ihr die stub öffnet und kopiert. Wie man was anhängt seht ihr ja schon oben.
Kopieren muß man die stub deswegen, da die originale so bleiben sollte wie sie ist, damit sie immer wieder benutzt werden kann.
Deshalb kopieren wir die stub, fügen den string an und fertig.

Hier ein code zum öffnen und kopieren einer externen Stub.
Code:
Dim buffer as string<br />Open (App.Path & "stub.dll")   For Binary As #1<br />Open (App.Path & "Programm.exe")   For Binary As #2<br />Buffer = Space(LOF(1))<br />Get #1, , Buffer<br />Put #2, , Buffer<br />Close
In den ersten zwei Zeilen wird ganz einfach die stub.dll geöffnet und dann die Programm.exe.

In der dritten Zeile passiert etwas Wichtiges. Wir fragen die Größe der Datei mit der Nummer 1 ab und füllen buffer mit so vielen Leerzeichen wie diese Datei groß ist.
Das machen wir, damit wir die ganze Datei auf einmal einlesen können.

In den nächsten Zeilen wird ganze einfach zuerst die stub.dll in buffer eingelesen und dann in Programm.exe geschrieben. Danach werden beide Dateien auf einmal geschlossen.
Nun haben wir eine exakte Kopie der stub.dll, aber mit den anderen Namen Programm.exe.

Man könnte das auch einfach per FileCopy von Windows erledigen lassen, aber ich denke so ist es eine bessere Lösung, und man weiß genau wann die Datei fertig erstellt worden ist.


Als letztes fehlt uns jetzt noch ein code, den wir in den Programm einfügen müssen.
Der muss ja am Ende irgendwie die infos an seinem Ende auslesen können.

8. Wie holt sich der Programm die Informationen

Eigentlich ist das sehr leicht und sollte mit den obigen Informationen leicht zu schaffen sein.
Aber das hier soll ja ein vollständiger Artikel sein.


Also hier ein code wie sich der Programm selbst öffnet und die Informationen am Ende ausliest.
Code:
Dim file as string, options as string * 100, cmd() as string<br />file = (App.Path & "" & App.EXEName & “.exe”)<br />Open file For Binary As #1<br />Get #1, (LOF(1) - 99), options<br />cmd() = Split(options, "#")
1. Zeile: Hier deklarieren wir die Variablen die wir brauchen. In file schreiben wir den Pfad zur eigenen Datei hinein. In options speichern wir den ausgelesenen string vom Ende der Datei. Das * 100 ist sehr wichtig und sollte der gleiche Wert sein, wie ihr beim Builder angegeben habt. In cmd() werden wir den string aus options teilen, um die einzelnen Informationen wieder zu erhalten.

2. Zeile: Hier übergeben wir den Pfad der eigenen Datei an die Variable file


3. Zeile: Hier öffnen wir die Datei als Nummer 1

4. Zeile: Hier lesen wir die angehängten Infos aus. Wenn ihr im Builder 100Bytes angegeben habt, dann müßt ihr hier unbedingt 99 angeben, da sonst ein Zeichen zuviel eingelesen wird.


5. Zeile: Das hier ist eine sehr wichtige Funktion, die ihr sicher auch noch in Zukunft sehr oft benutzen werdet. Mit Split wird der lange string, gespalten bzw. getrennt. Und nämlich überall dort, wo wir unser Trennungzeichen geschrieben haben. Nun trennt er uns diesen string also, und wir erhalten unsere zwei Infos Text1.Text und Text2.text. Aber wo sind diese jetzt? Ganz einfach.
cmd() ist ein Array. Stellt euch das wie eine Liste vor. Ihr könnt in jede Zeile dieser Liste etwas eintragen. Und wir haben zwei Infos eingefügt. Diese Liste fängt aber bei 0 an. Das heißt es sieht jetzt so aus:

cmd(0) = Text1.Text
cmd(1) = Text2.Text

Diese Variablen könnt ihr nun in eurem Programm benutzen und habt dadurch z.B. IP und Port bekommen, wo das Programm hin verbinden soll.


Ich hoffe ich konnte es euch verständlich erklären, damit ihr euren eigenen Builder programmieren könnt.



mfg, ZiG


Edit//
Source gibt es nun hier: http://www.vb-x.org/viewtopic.php?t=816
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: builder programmieren, anfänger, speichern

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: [Video] Lesson 5 - Arbeiten mit Dateien 2717 06.07.2009, 09:41
Keine neuen Beiträge Wichtig: [Video] Lesson 2 - If then Else, For Schleife 2275 14.02.2008, 07:21
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 1939 06.03.2008, 21:19
Keine neuen Beiträge [Video] VB Programm "stylen" 2389 05.02.2008, 16:09
Keine neuen Beiträge [Video] CommonDialog - Datein Laden und Speichern 958 10.12.2007, 10:41
 



[ Time: 0.2057s ][ Queries: 81 (0.0567s) ][ GZIP on - Debug on ]