[VB6] Bei Programmstart Dateipfad auslesen

Jacka

Erfahrenes Mitglied
Hallo!

Ich habe schon wieder ein Problem...

Es ist mir gelungen, mein Programm im Windows Kontextmenü zu plazieren.
Nun möchte ich gerne folgendes:
Wenn ich ein File oder einen Ordner z.B. C:\Dateien\ ganz normal im Windows-Explorer "markiert" habe und dann per rechtsklick über das Kontextmenü mein Programm starte, soll der Pfad und der Name der ausgewählten Datei bzw. Ordner als "string" ausgelesen wird.
Wie beim erstellen eines .rar mit Win-Rar z.B (siehe Anhang).

Ist das machbar und hat jemand einen Tipp?
Vielleicht irgendwie mit dem Common Dialog? Mmm...:confused:


Vielen Dank!

Grüße,
Jacka
 

Anhänge

  • 24459attachment.jpg
    24459attachment.jpg
    76,7 KB · Aufrufe: 471
Zuletzt bearbeitet:
Ich nehme an, du hast das "LinkSend"-Menü in das Kontextmenü reinbekommen, in dem du in der Registrierung von Windows einen entsprechenden Eintrag gemacht hast. Ich glaube du kannst in der Registrierung auch festlegen, was für Daten an dein Programm übergeben werden sollen, nachdem dieses über das Kontextmenü gestartet worden ist.

Hier mal ein Link (zu Punkt 3 "Kontextmenue ergänzen" runterscrollen!) zu einem Tipp, der erklärt wie man die DOS-Box aus dem Kontextmenü heraus mit dem aktuellen Pfad startet. Das kannst du umwandeln, so dass dein Programm gestartet wird.

Ich hab den Spaß jetzt mal ausprobiert, es funktioniert ganz gut.
Mache dazu folgendes:
erstelle ein Programm, dass bei Programmstart (oder auch nach einem Klick auf einen Button) folgende Codezeile enthält:
Visual Basic:
MsgBox VBA.Interaction.Command
Danach erstellst du eine Exe-Datei von dem Programm und speicherst es irgendwo.
Nun öffnest du die Registrierung von Windows (z.B. über Start-->Ausführen --> regedit eingeben)
Dann zum Schlüssel HKEY_CLASSES_ROOT wechseln, dann nach FOLDER, dann nach SHELL. Jetzt mit der rechten Maustaste auf SHELL draufklicken und im erscheinenden Menü auf Neu-->Schlüssel klicken. Wie du den Schlüssel nennst ist völlig egal (du solltest dir halt was sinnvolles ausdenken). Nun kannst du (musst du aber nicht!) in dem neu erstellten Schlüssel den Wert namens "(Standard)" bearbeiten (durch Doppelklick drauf) und einen Text eingeben. Dieser Text erscheint dann in deinem Kontextmenü.
Jetzt klickst du auf den neu erstellten Schlüssel wieder mit der rechten Maustaste und dann Neu-->Schlüssel. Dieser Schlüssel muss den Namen command erhalten.

Bis hier hin hast du es vermutlich schon selber rausgefunden (so wie ich es deinem Screenshot entnehme, aber vielleicht interessiert sich ja noch der ein oder andere dafür).

Dann den neuen Schlüssel command anklicken (linke Maustaste). Nun den Wert "(Standard)" durch Doppelklick bearbeiten: hier schreibst du nun den exakten Pfad zu deinem Programm rein, das gestartet werden soll und anschließend (durch Leerzeichen getrennt) die Zeichen "%1" (entweder mit oder ohne Anführungszeichen, je nach dem wie du es in deinem Programm später lieber haben möchtest.)
Wenn du die ganze Sache nun ausprobierst und einen oder mehrere Ordner im Explorer markierst und im Kontextmenü deinen eben erstellten Eintrag anklickst, dann sollte sich dein Programm starten und in der Messagebox (die wir eingebaut haben, siehe oben) den Pfad des markierten Ordners anzeigen.
(Wenn du mehrere Ordner markierst startet sich dein Programm mehrmals)

Edit:
Um einen Kontextmenü auch bei Dateien zu erhalten, gibt es mehrere Möglichkeiten (siehe hier).
Die einfachste Möglichkeit, um bei allen Dateien ein Kontextmenü zu erhalten, ist folgende:
man macht das Gleiche wie oben, nur in einem anderen Hauptschlüssel, nämlich HKEY_CLASSES_ROOT und dann im Schlüssel der nur einen Stern * als Namen trägt. Dort dann einen Ordner shell erstellen (bei mir war der noch nicht vorhanden) und dann die gleichen Schlüssel und Einträge wie oben geschildert erstellen.
Leider hat das einen Nachteil: Sollten Dateien noch keinem Programm zugeordnet sein (also wenn bei einem Doppelklick auf die Datei normalerweise der Windows "Öffnen-Mit..."-Dialog erscheint), so ist die Datei ab sofort deinem Programm zugeordnet...
 
Zuletzt bearbeitet:
Hallo!

Also das ist wirklich ein Zufall, denn genau so etwas brauche ich auch :)

Nun, ich habe alles so gemacht wie es da steht. Das Kontextmenü zu erweitern war kein Problem, doch ich bekomme immer folgende Fehlermeldung wenn ich das VBScript ausführe (siehe Bild):
unbenanntnd8.jpg


Ich habe trotzdem eine exe-datei erstellt, bekomme aber beim Ausführen keine Ausgabe.

Was habe ich denn falsch gemacht?


Danke

Gruß
Ghost1
 
Hallo Ghost1. Willkommen bei tutorials.de!

Es gibt einen Unterschied zwischen Visual Basic (VB), Visual Basic for Applications (VBA) und Visual Basic Script / VBScript.

Man kann von einem VBScript eigentlich keine .exe erstellen. Wie hast du das denn gemacht?

Um in VBScript ein Objekt zu kreieren muß man die Funktion CreateObject benutzen. Ob du aber so ein VBA.Interaction Objekt erzeugen kannst wage ich zu bezweifeln.

Gruß
 
hallo deepthroat!

Also die exe-datei habe ich mit dem Tool "VbsToExe" erstellt.

Der Tipp vom Shakie war ja ein Programm zu erstellen und die Codezeile da rein zu schreiben.
Ich habe mir gedacht, da muss ich eben ein VBScript erzeugen. War das etwa falsch?
Welches Programm soll ich denn sonst erstellen?


Gruß
 
Ghost1 hat gesagt.:
hallo deepthroat!

Also die exe-datei habe ich mit dem Tool "VbsToExe" erstellt.
Aha. Das kannte ich bisher nicht. :-(

Ghost1 hat gesagt.:
Der Tipp vom Shakie war ja ein Programm zu erstellen und die Codezeile da rein zu schreiben.
Ich habe mir gedacht, da muss ich eben ein VBScript erzeugen. War das etwa falsch?
Welches Programm soll ich denn sonst erstellen?
Wie du an dem [VB6] im Titel des Themas erkennen kannst ging es hier direkt um Visual Basic 6. Das ist eine richtige Entwicklungsumgebung für Visual Basic Programme. Mit dieser IDE kann man dann auch auch direkt .exe Dateien erzeugen. Außerdem hat man mit VB6 viel mehr Möglichkeiten als mit der abgespeckten VBScript Sprache.

Allerdings fällt mir gerade ein, in VBScript solltest du genauso gut folgendes machen können:
Visual Basic:
Dim command, arg
command = ""

for each arg in WScript.Arguments
  command = command & arg & " "
next

wscript.echo command
Gruß
 
hallo!

Danke für das Beispiel, doch leider bekomme ich nur eine MsgBox mit weißem Hintergrund, die auch ziemlich schnell verschwindet.

Ich stelle dir jetzt eine "dumme" Frage, da ich ein totaler Anfänger bin und mit VB noch was nie zu tun gehabt habe:
Mit welchem Tool kann man denn solche Programme (VB6) schreiben? Geht es mit Editor und dann mit einer bestimmten Datei-Endung abspeichern (so wie ich beim VBScript .vbs gemacht habe)?:confused:
Wenn man es in Word oder Excel mit dem visual-Basic-Editor macht, dann ist es ja Programmspezifisch, oder?:confused:

Viele dumme Fragen, ich weiss!:(

Danke

Gruß
 
Ghost1 hat gesagt.:
Danke für das Beispiel, doch leider bekomme ich nur eine MsgBox mit weißem Hintergrund, die auch ziemlich schnell verschwindet.
Also die MsgBox sollte erst verschwinden wenn du OK klickst. Wenn du die Datei einfach nur doppel-klickst dann ist es klar das nur ein leerer Dialog erscheint, denn dabei werden dem Skript keine Argumente übergeben. Das Ganze war ja dazu gedacht das Skript über das Kontextmenü eines Verzeichnisses aufzurufen. Wenn du das Skript z.B. so:
Code:
wscript c:\args.vbs "%1"
in die Registry einträgst, dann sollte beim Klick auf den entsprechenden Kontextmenüeintrag der Name des Verzeichnisses angezeigt werden. Bei mir funktioniert das auch.

Ghost1 hat gesagt.:
Ich stelle dir jetzt eine "dumme" Frage, da ich ein totaler Anfänger bin und mit VB noch was nie zu tun gehabt habe:
Mit welchem Tool kann man denn solche Programme (VB6) schreiben?
Mit Microsoft Visual Basic 6.
Ghost1 hat gesagt.:
Geht es mit Editor und dann mit einer bestimmten Datei-Endung abspeichern (so wie ich beim VBScript .vbs gemacht habe)?:confused:
Nein. Das Programm ist nicht kostenlos und auch normalerweise nicht bei Windows dabei. Es gibt allerdings eine Visual Basic Express 2005 Edition von Microsoft die man noch bis November kostenlos herunterladen kann. Allerdings handelt es sich hierbei um die Programmiersprache Visual Basic .NET (VB.NET) - was nochmal etwas anderes ist als VB, VBA und VBSkript obwohl alle auf der Programmiersprache BASIC basieren.
Ghost1 hat gesagt.:
Wenn man es in Word oder Excel mit dem visual-Basic-Editor macht, dann ist es ja Programmspezifisch, oder?:confused:
Das ist dann VBA und ja, es ist programmspezifisch - also es gibt sogar Unterschiede zwischen den einzelnen VBA Versionen für z.B. Word und Access.

Ghost1 hat gesagt.:
Viele dumme Fragen, ich weiss!:(
Fragen kost' ja nix.

Gruß
 
Zurück