PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Liste von ausgewählten Datein im WinExplorer an VB-Programm übergeben


Korrom
2004-09-07, 21:33:27
Hi zusammen!

Ich (VB-Anfänger!) habe ein Problem, zu dem ich bisher keine Lösung gefunden habe. Ich bastle eine VB-Anwendung, die ins Kontextmenü des Windows Explorer eingebunden sein soll. Es soll im Explorer eine Liste von Dateien markiert werden können, die beim Aufruf meines Programms an dieses übergeben wird (wie also z.B. bei den Kontextmenü-Einträgen von WinZip o.ä. im Explorer). Wie geht das? Hinweise wo und nach was ich zu suchen habe wären auch schon hilfreich.

Blumentopf
2004-09-08, 15:24:18
Hi zusammen!

Ich (VB-Anfänger!) habe ein Problem, zu dem ich bisher keine Lösung gefunden habe. Ich bastle eine VB-Anwendung, die ins Kontextmenü des Windows Explorer eingebunden sein soll. Es soll im Explorer eine Liste von Dateien markiert werden können, die beim Aufruf meines Programms an dieses übergeben wird (wie also z.B. bei den Kontextmenü-Einträgen von WinZip o.ä. im Explorer). Wie geht das? Hinweise wo und nach was ich zu suchen habe wären auch schon hilfreich.

Größte VB Datenbank mit source codes von schlecht bis profispitze:

www.planet-source-code.com
www.a1vbcode.com

Aus deiner Darstellung bin ich nicht ganz schlau geworden...
hab aber sowas auf oben ersten genannten link sicher mal was gesehen in der Richtung.

Korrom
2004-09-08, 20:11:18
Danke für die Links, werd mich da mal umschauen.

Sorry, wenn das ganze etwas unklar war. Hier nochmal hoffentlich ein wenig besser an einem Beispiel: WinZip. Dieses Programm legt im Windows Explorer Einträge im Kontextmenü an mit denen man z.B. Dateien im Explorer auswählen kann um diese direkt zu einem Archiv hinzuzufügen. Man markiert einige Dateien, macht einfach einen Rechtsklick auf die ausgewählten Dateien, wählt "Zum Archiv hinzufügen..." und gut. Meine Frage bezieht sich darauf, wie WinZip mitbekommt, welche Dateien man im Explorer ausgewählt hat. Irgendwie muß diese Auswahl WinZip zur Abfrage zur Verfügung stehen. Wie stellt also Explorer die Liste der ausgewählten Dateien bereit und wie frage ich die von meinem Prgramm aus ab?

Ich hoffe diesmal ist es ein wenig klarer geworden.

Blumentopf
2004-09-09, 07:45:53
Hier ein tutorial in englisch dazu: (enthält ein Code beispiel)

http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=8725&lngWId=1

Ncoh so was in der Art:
http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=9709&lngWId=1

Hoffe habe gehelft.

Hier ein VB Only forum: (englisch)
http://www.xtremevbtalk.com/

Korrom
2004-09-09, 13:08:10
Danke. Wie ein Eintrag im Kontextmenü des Explorers angelegt wird, hatte ich leider schon rausgefunden. Nun geht es nur noch darum, wie ich meinem Prgramm beibringe, welche Dateien ich im Exporer ausgewählt habe. Hinweise darauf habe ich schon aus anderen Codebeispielen von pscode.com. Es scheint so, als würden die ausgewählten Dateinamen bei einem Start meines Programms über das Kontextmenü diesem vom Explorer als Kommandozeilenparameter mitgegeben. Mmmh. Muß mal was kleines basteln und die einfach mal auslesen, vielleicht bin ich dann ja schlauer...

Korrom
2004-09-13, 14:40:49
So, eine Teillösung habe ich erzielt. Der Explorer übergibt die markierten Dateien in einer Umgebungsvariablen. Diese läßt sich abfragen, indem man das Programm mit %1 als Kommandozeile startet und dann die Kommandozeile ausliest. Das Problem ist nur, daß, wenn mehrere Dateien im Explorer markiert sind, er auch mein Programm mehrmals startet und jedesmal nur eine der markierten Dateien übergibt. Liegt das in der Natur der Sache oder an der Tatsache, wie ich das Programm in der Registry eingetragen habe? Um es nämlich im Kontextmenü des Explorers unterzubringen, habe ich es in HKEY_CLASSES_ROOT/*/shell/Programmname/Command eingetragen und den Programmpfad als Wert von (Standard) eingetragen. Hat jemand 'ne Idee wie ich das abfangen kann, um alle Dateinamen an eine einzelne laufende Instanz meines Programms zu übergeben?

Xmas
2004-09-13, 18:41:01
Ein Beispiel mit VB.net:
http://www.codeproject.com/vb/net/singleinstance.asp

Korrom
2004-09-14, 14:19:42
Prima, das scheint die Lösung zu sein. Ist zwar für .net, aber da ich jetzt wußte, nach was ich zu schauen habe, habe ich schnell eine mit VB6 kompatible Lösung gefunden. Da das ganze über meinen bisher bescheidenen VB-Horizont rausgeht, werde ich mir heute abend mal das notwendige Wissen reinschaufeln und dann testen. Mal sehen ob's funzt.