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.