Autor |
Beitrag |
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 12:27
Hallo!
Es scheint nicht möglich zu sein, viele Dateien per "Senden an"-Menü an eine Anwendung zu schicken. Ich vermute, dass die resultierende Kommandozeile nicht länger als 255 Zeichen sein darf.
Dadurch habe ich den dummen Effekt, dass ich mein Programm zwar prinzipiell mit beliebig vielen Dateien als Parameter starten kann (in der Eingabeaufforderung geht es wunderbar), aber das "Senden an"-Menü je nach Pfadlänge nur vier oder fünf Dateien zulässt. Bei mehr Dateien wird mein Programm gar nicht erst gestartet.
Dies ist bei allen Einträgen im "Senden an"-Menü so, die eine Verknüpfung sind. Nun gibt es aber den Eintrag "Mail Recipient", der keine Verknüpfung sondern ein "Mail Service" ist. Den kann man mit beliebig vielen Dateien per "Senden an" füttern.
Und damit komme ich zu meiner Frage: Wie kann ich so etwas wie diesen "Mail Recipient"-Eintrag für mein Programm erstellen? Oder gibt es eine einfachere Lösung?
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
ene
      
Beiträge: 779
Erhaltene Danke: 1
Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
|
Verfasst: Mi 01.08.07 12:33
Hi,
da ich mich leider nicht so sehr mit dem Thema in Delphi auskenne...hast du keine Möglichkeit einen String an "dein Programm" zu übergeben und diesen zu parsen? Dann könntest du dort die Attatchments anfügen.
_________________ Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
|
|
Christian S. 
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 14:07
Darin besteht ja gerade das Problem
"Senden an" übergibt ja die gesendeten Dateien als String an mein Programm. Und wenn der String zu lang ist, wird das Programm gar nicht erst gestartet.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Mi 01.08.07 14:18
Ich habe davon zwar sowas von keine Ahnung aber trotzdem:
Wenn ich Gausis Nemp starte und dann Dateien hinzufüge, dann markiere ich diese und dann öffne ich das Programm halt mit jedem Parameter. Und da Nemp nicht mehrmals gestartet wird, fügt der die Datei immer in die Playliste ein. So könntest du das doch auch machen oder?
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 01.08.07 14:21
Scheint so, als müsstest du dafür einen extra Dateityp definieren, und dann solch eine 0KB-Datei in den SendTo-Ordner setzen. Sieh dir mal in der Registry die Dateierweiterung .MAPIMAIL an.
(Erstell mal eine neue .mapimail-Datei und zieh eine Datei drauf  )
|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mi 01.08.07 14:30
Also ich habs gerade noch mal getestet. Anwendung geschrieben die nicht viel mehr macht als die Parameter in eine Listbox zu schreiben und zusätzlich noch die Länge der Parameter ausgibt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 0 To ParamCount Do ListBox.AddItem (ParamStr(i), nil);
Label1.Caption := IntToStr (Length (GetCommandLine)); end; |
Dann eine Verknüpfung im SendTo angelegt und dann ganz viele Dateien an meine Test-Anwendung per "Senden an" geschickt. Hat ohne Probleme funktioniert. Egal mit wie vielen Dateien.
Lg, Martin
_________________ Ein Nutzer der Ecke
|
|
Christian S. 
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 14:38
@Regan: Das löst das Problem mit "Senden an" aber nicht
@Chryzler: Ah, das sollte ja zu schaffen sein  Das hilft mir weiter, danke!
@Martin: Komisch  Vielleicht ein Bug in Vista? Es liegt nicht an meinem Programm, das wird ja gar nicht gestartet und wenn ich den Photoshop ins "Senden an" Menü packe, habe ich bei dem denselben Effekt.
Könnte das mal jemand mit Vista testen?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 01.08.07 14:43
Funktioniert es denn wenn du nur eine Datei an deine Anwendung schickst?
Gruß,
Tino
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mi 01.08.07 14:43
Kann ich heut abend auch mal ausprobieren. Hab aber hier zwar grad Vista, aber kein Delphi. Zuhause beides.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Mi 01.08.07 14:47
Christian S. hat folgendes geschrieben: | @Regan: Das löst das Problem mit "Senden an" aber nicht  |
Was bringt mir denn das, wenn ich es mit "Senden an" mache? Ich habe das noch nie beutzt und trotzdem lebe ich noch.
|
|
Christian S. 
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 15:52
Regan hat folgendes geschrieben: | Was bringt mir denn das, wenn ich es mit "Senden an" mache? |
Das ist nicht Thema des Threads. Ich will es so machen. Punkt. Weitere Diskussion dazu, ob Du das gerne anders machst, gehören hier nicht hin.
Tino hat folgendes geschrieben: | Funktioniert es denn wenn du nur eine Datei an deine Anwendung schickst? |
Ja, bei wenigen Dateien funktioniert es. Daher meine Vermutung, dass es mit der Länge des resultierenden Kommandos zusammen hängt.
GTA-Place hat folgendes geschrieben: | Kann ich heut abend auch mal ausprobieren. Hab aber hier zwar grad Vista, aber kein Delphi. Zuhause beides. |
Danke.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Christian S. 
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 18:09
Gausi konnte mir das Verhalten unter Vista bestätigen (Danke nochmal!)
Leider war ich bisher nicht in der Lage, einen Dateitypen so zu registrieren, dass er tatsächlich im "Senden An"-Menü erscheint. Ich kann auf eine entsprechende Datei doppelklicken und mein Programm öffnet sich auch. Aber wenn ich eine solche Datei im "Senden An"-Ordner anlege, erscheint sie trotzdem nicht im Menü. 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 01.08.07 18:40
Also wenn ich ne Verknüpfung mit meiner Exe unter c:\users\[user]\AppData\Roaming\Microsoft\Windows\SendTo lege, dann funktioniert das eigentlich auch. Das hab ich vor ein paar Tagen erst gemacht, aber ich werde das gleich nochmal testen, wie das mit vielen Dateien ist. Aber eigentlich ist mir bisher nicht aufgefallen, dass was nicht geht, wenn ich mehrere Dateien nehme.
(Vielleicht waren die Pfade so kurz, dass es trotzdem kurz genug war, mal sehen.)
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 01.08.07 18:57
Christian S. hat folgendes geschrieben: | Gausi konnte mir das Verhalten unter Vista bestätigen (Danke nochmal!)
Leider war ich bisher nicht in der Lage, einen Dateitypen so zu registrieren, dass er tatsächlich im "Senden An"-Menü erscheint. Ich kann auf eine entsprechende Datei doppelklicken und mein Programm öffnet sich auch. Aber wenn ich eine solche Datei im "Senden An"-Ordner anlege, erscheint sie trotzdem nicht im Menü.  |
Das sind irgendwie "andere" Dateitypen: Wenn man zum Beispiel auf eine MAPIMAIL-Datei doppelklickt, kann Windows nix mit dem Dateityp anfangen, zieht man jedoch andere Dateien darauf, weiß Windows auf einmal, was es starten soll. Das muss irgendwie so in der Registry drinstehen. Ich guck mir das mal genauer an...
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 01.08.07 19:03
DDE vielleicht? Ich meine, das ist zwar schon alt, wurde aber in XP dafür noch verwendet, und da ist die Anzahl der Dateien natürlich egal.
Ob das unter Vista auch noch benutzt wird, keine Ahnung, wäre aber zumindest eine Möglichkeit, die ich mal prüfen werde.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 01.08.07 19:10
Ich glaube ich habs:
Unter HKEY_CLASSES_ROOT befindet sich ein Schlüssel .MAPIMAIL. Dessen Standard-Wert ist auf CLSID\{9E56BE60-C50F-11CF-9A2C-00A0C90A90CE} gesetzt. Außerdem gibt es einen Unterschlüssel PersistentHandler, dessen Standard-Wert ebenfalls {098f2470-bae0-11cd-b579-08002b30bfeb} ist. Unter dieser CLSID gibts dann einen Unterschlüssel InProcServer32, dessen Standard-Wert eine DLL-Datei ist, die warscheinlich die Aufrufroutine enthält. Außerdem gibts noch einen shellex-Unterschlüssel, der wiederum den Schlüssel DropHandler enthält (!). Dessen Standard-Wert ist wieder die CLSID {9E56BE60-C50F-11CF-9A2C-00A0C90A90CE}. Hope that helps.
|
|
Christian S. 
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 01.08.07 22:13
Hm. Dann werde ich mich jetzt mal drüber schlau machen, was denn ein InProcServer ist und wie man den erstellt.
Danke schonmal für Deine Mühe! 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.08.07 02:53
Da steht dazu zum Beispiel was: msdn2.microsoft.com/...g_shell_ext_handlersIch hab mich damit mal früher beschäftigt, da allerdings zu dem Zweck, eigene Menüpunkte (bzw. eine grafische Dateivorschau  ) ins Kontextmenü einzufügen, aber wenn das bei SendTo auch damit geht, umso einfacher, denn eigene Menüpunkte waren zwar etwas undurchsichtig am Anfang, am Ende aber doch sehr einfach zu realisieren.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.08.07 14:45
Also, ich hab das jetzt mal getestet. Unter Vista passiert bei mir folgendes:
Lege ich eine Verknüpfung mit der ausführbaren Datei in das SendTo-Verzeichnis, dann passiert bei mir rein gar nix. Lege ich eine ausführbare Datei hinein, dann kommen Dateien an, und zwar so viele, bis die Länge der Kommandozeile größer als ca. 2050 Zeichen ist. Wähle ich mehr Dateien aus, dann kommt eine Fehlermeldung: "Der an einen Systemaufruf übergebene Datenbereich ist zu klein"...
Das fiel mir aber erst auf, als ich mehr als 70 Dateien im System32-Verzeichnis getestet habe, vorher war der Pfad einfach so kurz, dass der Fehler nicht aufgetreten ist (und so viele Dateien habe ich an das Programm, das ich da bereits hingelegt hatte wohl einfach nie geschickt).
Per eigenem Eintrag im Menü funktioniert alles wie es soll, es kommen alle Dateien an, ich probiere das gerade aus, ob das via SendTo tatsächlich genauso geht, wenn ja, dann ist das keine große Sache.
|
|