Dateien drucken per Explorer Kontextmenü

  • Hallo Leute,

    Bei einem Rechtsklick auf bestimmte Dateien erscheint der Menüeintrag "Drucken", mit dem man Dateien direkt drucken kann, statt sie erst zu öffnen (etwa bei pdf).

    Allerdings hat der Menüpunkt einige Nachteile (und funktioniert bei einem in unserer Firma seit dem Fall Update nicht mehr...). U.a. können nur 15 Dateien gedruckt werden.

    Also habe ich mir selbst ein kleines Tool dafür geschrieben. Allerdings kommen da wie immer gleich neue Fragen/Probleme auf.

    Der Menüeintrag "Drucken" erscheint nur bei bestimmten Dateien (bei mir Excel-, PDF- und Word-Dateien). Also setzen das die jeweiligen Programme wie Office und PDF-Reader. Ich habe jedoch nur einen Artikel gefunden, wie man Einträge für alle Ordner oder alle Dateien erstellen kann. https://support.microsoft.com/de-de/help/509254 Das ist soweit noch ok - wenigstens das Drucken funktioniert.

    ShellExecuteWait($sFilePath, "", @WorkingDir, "print", @SW_HIDE)

    Allerdings würde ich auch gerne einfache TXT-Dateien drucken. Hier kommt aber die Meldung, dass kein Programm dieser Aktion zugeordnet ist.

    Also

    1. Weiß jemand, wie Kontextmenü-Einträge bei Dateien auf bestimmte Dateiendungen beschränke?

    und oder

    2. Wie kann ich z.B. bei TXT-Dateien die Aktion Drucken mit meinem Programm verknüpfen oder einfach dafür sorgen, dass ich den Druck dieser Dateien starten kann?

    Grüße autoiter

  • Welche Verben für welche Dateien in ShellExecute verwendet werden können steht in der Registry - genauer in HKEY_CLASSES_ROOT.

    Um zum Beispiel für txt-Dateien einen entsprechenden Eintrag hinzuzufügen geht man so vor:

    1. Im Standard-Value von HKEY_CLASSES_ROOT\.txt schauen welcher Dateityp mit der Endung .txt verknüpft ist. Wir erhalten txtfile
    2. Also nach HKEY_CLASSES_ROOT\txtfile navigieren.
    3. Die Verben für ShellExecute stehen im Unterschlüssel shell - also nach HKCR\txtfile\shell\print\command navigieren.
    4. Dort im Standardwert das Kommando eintragen welches ausgeführt werden soll sobald jemand "Drucken" aus dem Kontextmenü ausführt. Hierbei stellt %1 eine Variable für den Dateipfad dar.
    5. Bei mir ist dort im übrigen %SystemRoot%\system32\NOTEPAD.EXE /p %1 eingetragen.
  • Hier mal was zu den 15 Dateien die nur gedruckt werden.

    Link

    Und hier etwas um *.txt im Contex hinzufügen oder aber auch entfernen zu können.

    Link

    Sollte auch bei Win10 gehen, zumindest bei mir macht es das.


    Ups zu langsam.

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Hey, danke euch beiden!

    Super. Damit werde ich mal versuchen zu spielen und im Zweifel entsprechende Reg.-Einträge für weitere Dateitypen erstellen. Xml-Dateien wie im Beispiel in Link 2 von oh-ha fehlen bei mir auch.

    Noch eine Frage zu dem Verb Print.

    Ich habe nachgesehen und festgestellt, dass bei mir das gleiche dort stand, wie AspirinJunkie schon schrieb. Nur wurde bei mir eben nicht gedruckt. Allerdings war das Problem hausgemacht. Ich hatte über den Dialog "Öffnen mit" Notepad++ zum Standardeditor für Textdateien gemacht. Das habe ich zurück geändert auf Editor und schon habe ich den Eintrag "Drucken" im Kontextmenü, wenn ich Rechtsklick auf eine TXT-Datei mache und drucken klappt auch.

    Nun muss es aber noch einen weiteren Punkt geben, den man ändern muss. Denn auch wenn ich wieder Notepad++ zum Standardeditor mache, ändert sich nicht der Eintrag HKCR\txtfile\shell\open\command. Dort bleibt %SystemRoot%\system32\NOTEPAD.EXE %1. Allerdings führt nun der Klick auf "Öffnen" im Kontextmenü wieder dazu, dass die Textdatei mit Notepad++ geöffnet wird..

    Ich hätte erwartet unter HKCR\txtfile\shell\open\command nun auch Notepad++ zu sehen.

    Grüße autoiter

  • Nun muss es aber noch einen weiteren Punkt geben, den man ändern muss. Denn auch wenn ich wieder Notepad++ zum Standardeditor mache, ändert sich nicht der Eintrag HKCR\txtfile\shell\open\command. Dort bleibt %SystemRoot%\system32\NOTEPAD.EXE %1. Allerdings führt nun der Klick auf "Öffnen" im Kontextmenü wieder dazu, dass die Textdatei mit Notepad++ geöffnet wird.

    Der Explorer wendet noch andere Regeln an als ShellExecute sobald man einmal den Öffnen-Mit Dialog verwendet hat.
    Hierzu macht der Explorer dann Eintragungen hier: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt.

    Unter \UserChoice - ProgId wird hierbei entweder ein Verweis auf eine Anwendung aus HKCR\Applications\ gesetzt oder einen Dateityp aus HKCR.

    Wenn man diesen Eintrag löscht müsste der Explorer zurückspringen auf die Regeln von HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\OpenWithList. Dort sind buchstabiert einzelne Verknüpfungen aufgelistet. Deren Reihenfolge sich dann nach dem Wert von MRUList.

    Falls auch das nicht funktioniert bin ich überfragt und du müsstest dich mal bei MSDN oder so in die Thematik einlesen.

  • Hm, alles sieht so aus, wie du es erklärst. Löschen kann ich den besagten Eintrag leider nicht - nicht einmal bearbeiten (sonst hätte ich da die Dateityp-Werte gesetzt, die bei NOTEPAD als Standardeditor auch eingetragen sind).

    Trennen kann ich die Auswahl von Öffnen und Drucken momentan also nicht. Erst einmal bleibt das normale Notepad damit Standardeditor. Ich werde mich mal zu informieren versuchen. Jedenfalls weiß ich nun aber viel besser um was es geht. Vielen Dank. :thumbup:

    Grüße autoiter

  • Ich habe nichts gefunden, wie ich die über das Kontextmenü vorgenommene Nutzereinstellung ändern kann. Daher habe ich es über den Pfad probiert, der hinterlegt ist, wenn notepad++ der Standardeditor ist Applications\notepad++.exe.

    Dort habe ich die Schlüssel -> command. Notepad++ hat keinen Kommandozeilenparameter für drucken. Daher habe ich das normale Notepad eingetragen. Jetzt kann ich weiter standardmäßig mit Notepad++ die Dateien öffnen und mit MS Notepad drucken.

    Allerdings konnte ich nicht die Umgebungsvariable nutzen (es kam beim Drucken eine Fehlermeldung, die fehlende Berechtigungen nahelegte. Also habe ich den Pfad fest eingetragen C:\Windows\system32\notepad.exe /p %1.

    Vielen Dank nochmal für die Hilfe! :thumbup::thumbup:

    Grüße autoiter