ProgramParameter() - Get Selected Files Explorer

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
Zuletzt geändert von mhs am 09.12.2015 12:21, insgesamt 1-mal geändert.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag von NeoChris »

Doch du kanst nämlich mehrere Parameter also mehrere Datei Pfaden übergeben
und die Max Länge ist schnell ereicht.
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Re: ProgramParameter() - Get Selected Files Explorer

Beitrag 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 !
Bild Bild
Antworten