Wieder einmal "Öffnen mit"...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Wieder einmal "Öffnen mit"...

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Wieder einmal "Öffnen mit"...

Beitrag 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
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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$)
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
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Der Explorer übergibt leider immer nur die letzte Datei, in der Auswahl, die einzige Möglichkeit wäre Senden An.
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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.
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! Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mit Doppel-Null-Byte.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Beitrag 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.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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.
Windows 11 - PB 6.03 x64
_________________________________
Antworten