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
Wieder einmal "Öffnen mit"...
Re: Wieder einmal "Öffnen mit"...
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
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
a²+b²=mc²
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:
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$)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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.
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.
Zuletzt geändert von Thorium am 04.10.2008 16:34, insgesamt 1-mal geändert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!

- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Hi,
...das sollte helfen, wenn die Datei nicht mit dem Programm assoziiert ist:
ComatePlus wird benötigt!....einfach exe machen, mehrere Dateien auswählen und "öffnen mit" klicken...kann man auch in den SendTo-Ordner kopieren.
...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)
Windows 11 - PB 6.03 x64
_________________________________
_________________________________