Seite 2 von 3

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 08.12.2015 22:55
von kunstlust
Weil das Tool hinterher noch Optionen Abfragen kann, das würde sich nur mit vielen Order erledigen lassen.
Das es andere Wege gibt, ist mir klar, ich möchte aber gerne verstehen wie andere Tools das machen.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 08.12.2015 23:20
von RSBasic
@kunstlust
Der Eintrag "ZIP-komprimierter Ordner" basiert auf die Datei "ZIP-komprimierter Ordner.ZFSendToTarget" mit dem Inhalt "Zip".
Diese Datei ist in der Registry mit der GUID "{888DCA60-FC0A-11CF-8F0F-00C04FD7D062}" mit der zipfldr.dll-Datei registriert.
Ist wahrscheinlich ebenfalls ein Handler, der das alles abfängt.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 00:46
von GPI
Gerade was gefunden:
On computers running Microsoft Windows XP or later, the maximum length of the string that you can use at the command prompt is 8191 characters. On computers running Microsoft Windows 2000 or Windows NT 4.0, the maximum length of the string that you can use at the command prompt is 2047 characters.
https://support.microsoft.com/en-us/kb/830473

Sollten weniger ankommen, dann ist das eine Einschränkung von PB und damit eigentlich schon ein Bug.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 08:19
von Bisonte
GPI hat geschrieben:Sollten weniger ankommen, dann ist das eine Einschränkung von PB und damit eigentlich schon ein Bug.
Nicht, wenn irgendwo im Programm dieses merkwürdige #MAX_PATH auftaucht. Das wird irgendwie immer genommen, wenn es um Pfade
dimensionieren geht. Warum erschloß sich mir bisher nie....

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 10:04
von GPI
Warum ist schnell geklärt, der Name sagt alles. Das war mal früher die maximale Pfadlänge und auch viele APIs haben die Begrenzung - wenn ich mich richtig erinnere, gerade wenn man die ANSI-Version benutzt. Warum das ganze? Abwärtskompatiblität.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 10:22
von NeoChris
Beim Ntfs gibt es auch diese magischen 255 beim Datei Namen. Aber warum löst man das mit dem ProgramParameter nich so
das ältere OSes ihre 255 Zeichen eintippen und lesen können aber aktuelle Systeme können mehr. Es wird lediglich mehr Speicher zugewiesen.
Warum tut sich MS so schwer? Warum muss das alles statisch sein und nicht dynamisch? Ich nehme an MS macht so:

Code: Alles auswählen

PeekS(*ProgramParameter, 255)
Warum nicht so?

Code: Alles auswählen

PeekS(*ProgramParameter)
Mit Pb klappts doch auch.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 10:58
von mhs
Generell können Dateinamen unter Windows diese magische Grenze nicht überschreiten. Wenn man es trotzdem versucht, erhält man folgende Meldung:
Der erstelle Dateiname ist zu lang.

Wiederholen Sie den Vorgang mit einem kürzeren Dateinamen oder erstellen Sie die Datei in einem Ordner, der einen kürzeren Pfad hat.
Afaik ist es nicht möglich längere Dateinamen zu erstellen, auch nicht auf einem Netzwerkshare per UNC Pfad. Ausnahme könnten hier evtl. in Verbindung mit einem Samba Share auftreten. Es dürfte also gar nie zu dem Problem kommen, dass der Pfad länger ist als per ProgramParameter übergeben werden kann.

Ausnahme sind ansonsten nur Anwendungen die neue APIs verwenden und dadurch mehr Zeichen zulassen. Aber der Explorer sollte generell bei 255 Zeichen begrenzen.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 11:11
von NeoChris
Doch du kanst nämlich mehrere Parameter also mehrere Datei Pfaden übergeben
und die Max Länge ist schnell ereicht.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 11:23
von mhs
Ähm nein... <) Wenn du mehrere Dateien übergibst, dann zählt die 255 Zeichenbeschränkung nur für jeden Dateinamen einzeln, nicht für alle zusammen.

Kannst du ja mal selbst ausprobieren:

Code: Alles auswählen

Define.i Length, i, Count

Count = CountProgramParameters()

For i = 0 To Count -1
  Length + Len(ProgramParameter(i))
Next i

MessageRequester("Länge", Str(Length))
Als Exe kompilieren und viele Dateien per Drag & Drop auf die Exe schieben.

Re: ProgramParameter() - Get Selected Files Explorer

Verfasst: 09.12.2015 15:40
von sibru
Beim Aufruf mit selektierten Dateien wird Dein Programm mehrfach aufgerufen: für jede markierte Datei ein seperater Aufruf (instanzen), und hierbei sind 260 Zeichen meißt ausreichend.

Um´s via Explorer-Menü aufzurufen, ist wie folgt vorzugehen:

Eintrag im Explorer-Menü für "markierte Datei": (MENUETEXT erscheint im Explorer-Menü bei rechtsKlick)

Registry-Eintrag:
[HKEY_CLASSES_ROOT\*\shell\MENUETEXT\command]
@="PROGRAMM.EXE \"%1\"" (PROGRAMM.EXE = vollständiger Compilat-Dateiname incl. Pfad!!!)


viel Erfolg !