Codepage für Shell-Erweiterung festlegen
Ich muss eine Shell-Erweiterung für Windows registrieren, die Dateien und Ordner mit Namen in beliebigen Sprachen verarbeiten kann.
Leider scheint Windows seine Shell-Erweiterungen über eine Eingabeaufforderung auszuführen. Daher werden Parameter nicht in Unicode, sondern in der Codepage der Eingabeaufforderung übertragen, die fast immer fehlerhaft ist. Ich weiß, dass Windows über eine API-Funktion GetCommandLineW
verfügt. Da das betreffende Programm jedoch in Java geschrieben ist, würde die Verwendung dieses Programms einen plumpen JNA / JNI-Code erforderlich machen, den ich zu vermeiden versuche.
Das Festlegen der Standard-Codepage für das gesamte Betriebssystem scheint keine praktikable Option zu sein, da die einzige Option, die ich gefunden habe, die Einstellung war HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP
, die das System dazu bringen kann, das Booten zu verweigern - ein großes Nein-Nein, wie wir reden Produktionsmaschinen.
Ich habe versucht, meine Shell-Erweiterungen command
auf etwas einzustellen
chcp 65001 & "C:\path\to\java\javaw.exe" -jar "C:\path\to\program\program.jar" "%1"
oder Variationen mit oder ohne %SystemRoot%
, > nul
etc., aber alle Ergebnis in den gleichen - wenn die Shell - Erweiterung eine Eingabeaufforderung blinkt Ausführung, aber mein Programm wird nie aufgerufen.
Der nächste Schritt war das Erstellen einer einfachen Batchdatei:
chcp 65001 "C:\path\to\java\javaw.exe" -jar "C:\path\to\program\program.jar" "%1"
und ändern Sie den Shell-Erweiterungsbefehl in:
"C:\path\to\program\batch.bat" "%1"
Immer wenn ich versuchte, das auszuführen, würde ich eine Fehlermeldung erhalten
Das System konnte nicht vom angegebenen Gerät lesen
Dies lässt vermuten, dass der Parameter durch die Ausführung der Shell-Erweiterung vor dem Erreichen der Batchdatei durcheinander gebracht wurde. Dann konnte er nicht gespeichert werden.
Meine Frage ist also: Gibt es eine vernünftige Möglichkeit, Windows aufzufordern, Argumente in Unicode (oder einer anderen Codepage) zu übergeben, wenn eine Shell-Erweiterung ausgeführt wird? Oder ist die einzige Option, die native API zu verwenden GetCommandLineW
?
0 Antworten auf die Frage
Verwandte Probleme
-
12
Warum wird der Ordner / winsxs so groß und kann er verkleinert werden?
-
2
Erhöhte Berechtigungen für Startanwendungen in Windows?
-
14
PDF Viewer unter Windows
-
7
Welche Windows-Dienste kann ich sicher deaktivieren?
-
8
Firefox PDF-Plugin zum Anzeigen von PDF-Dateien im Browser unter Windows
-
1
Windows verliert das Bildschirmlayout
-
1
Gibt es eine Möglichkeit, Installationen / Updates zu verhindern, die meine Festplatte mit kryptisch...
-
1
Wie kann ich von Ubuntu aus über das Netzwerk auf Windows Vista-Drucker zugreifen?
-
6
Log Viewer unter Windows
-
3
Windows-Hintergrundproblem mit zwei Bildschirmen