Seite 1 von 1
Wieder einmal "Öffnen mit"...
Verfasst: 04.10.2008 14:36
von Waldixxl
Hallo
Ich hätten wieder einmal eine Frage zu Öffnen mit.. im Explorer
Also
wenn ich mehrere Dateien im Explorer markiere und anschießend mit Öffnen mit... mein Programm starte
wird nur ein Dateiname an mein Programm übergeben, welchen ich mit ProgramParameter()
auslesen kann. (Auch bei mehrmaligen Aufruf von ProgramParameter() hilft nichts.
Weiß jemand wo ich die markierten Dateien finde bzw.
wie ich sie in mein Programm einlesen kann
Version 4.20
WindowusXP
Re: Wieder einmal "Öffnen mit"...
Verfasst: 04.10.2008 16:22
von Kiffi
Mit CountProgramParameters() ermittelst Du die Anzahl der Parameter, die
Deinem Programm übergeben wurden.
Damit kannst Du dann eine Schleife bilden und den Index an
ProgramParameter() übergeben. Alles weitere in der PB-Hilfe.
Grüße ... Kiffi
Verfasst: 04.10.2008 16:24
von STARGÅTE
nene geht nicht Kiffi ^^
Wenn du mehrere Datein makierst, MUSST du ja auf eine rechts klicken und dann Öffnen Mit machen, damit wird aber nur EINE Datei übergeben:
Code: Alles auswählen
Ergebnis = CountProgramParameters()-1
For n = 0 To Ergebnis
Text$ + ProgramParameter(n) + Chr(10)
Next n
MessageRequester("",Text$)
Verfasst: 04.10.2008 16:27
von Kai
Der Explorer übergibt leider immer nur die letzte Datei, in der Auswahl, die einzige Möglichkeit wäre Senden An.
Verfasst: 04.10.2008 16:28
von Thorium
Nur mal als Spekulation, weils ja bei dem OpenFile-Dialog von Win genauso ist: Möglicherweise sind die Dateinamen durch Null-Bytes getrennt. Da PB von einem nullterminierten String ausgeht findet es natürlich nur den ersten Dateinamen.
Müsste man mal überprüfen. Interessante Frage ist dann aber wie man das Ende der Kette feststellt.
Edit:
Das feststellen des Endes der Kette ist kein Problem, da währe dann noch ein zusätzliches Nullbyte:
Könnte man einfach mal ausprobieren, man müsste halt eine Prozedur basteln, die den String auf Binärebene auseinanderwurschtelt.
Hier nochmal die Info zu dem OpenFile-Dialog:
OPENFILENAME Structure
Bei lpstrFile steht es beschrieben. Muss aber wie gesagt nicht auf den Explorer zutreffen, weis auch garnicht ob Nullbytes als Parameter überhaupt übergeben werden können.
Verfasst: 04.10.2008 16:32
von Fluid Byte
Mit Doppel-Null-Byte.
Verfasst: 04.10.2008 16:35
von Waldixxl
Es wird nur ein Parameter von Windows an mein Programm übergehen. Egal wie viele
Dateien ich markiere.
Mit den Aufruf vom CountProgramParameters() erhalte ich eine 1.
Verfasst: 16.05.2009 11:53
von marco2007
Hi,
...das sollte helfen, wenn die Datei nicht mit dem Programm assoziiert ist:
ComatePlus wird benötigt!
Code: Alles auswählen
XIncludeFile "C:\Programme\PureBasic\Include\COMatePlus.pbi"
Define.COMateObject FolderView, Folder, item, items
Define.COMateEnumObject sel
;Result.l = GetForegroundWindow_()
;GetWindowModuleFileName_(result, @sFileName.s{#MAX_PATH}, #MAX_PATH)
;path.s=GetPathPart(sFileName)
path.s=GetPathPart(ProgramParameter())
FolderView = COMate_CreateObject("Shell.Application")
If FolderView
Folder = FolderView\GetObjectProperty("Windows")
If folder
FolderView\Invoke("open = '"+path+"'")
Item=folder\GetObjectProperty("Item()")
If item
sel= item\CreateEnumeration("Document\selectedItems")
items = sel\GetNextObject()
While items
file.s + items\GetStringProperty("Name") +Chr(13)
items\Release()
items = sel\GetNextObject()
Wend
item\release()
EndIf
folder\release()
Else
MessageRequester("Sorry - CreateObject fehlgeschlagen", COMate_GetLastErrorDescription())
EndIf
FolderView\Release()
Else
MessageRequester("Sorry - CreateObject fehlgeschlagen", COMate_GetLastErrorDescription())
EndIf
MessageRequester("Files", file)
....einfach exe machen, mehrere Dateien auswählen und "öffnen mit" klicken...kann man auch in den SendTo-Ordner kopieren.