Новый ответ
Это тот минимум, который нужно правильно связать. Я узнал об этом, попробовав свой собственный совет № 4 ниже (Вы можете узнать, как Windows делает это для вас ...).
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.myext]
@="myext"
[HKEY_CLASSES_ROOT\myext]
@=".myext file"
[HKEY_CLASSES_ROOT\myext\shell]
[HKEY_CLASSES_ROOT\myext\shell\open]
[HKEY_CLASSES_ROOT\myext\shell\open\command]
@="\"C:\\...\\run.exe\" \"%1\""
При необходимости вы можете добавить DefaultIcon и другие вещи, но без DefaultIcon Windows просто будет использовать значок в run.exe
(если он есть). Вы можете добавить его в конвертере Batch To Exe при создании run.exe
).
Важность %1
и кавычек
Причина, по которой вам нужно поместить %1
состоит в том, чтобы передать путь и имя связанного файла (file.myext
) в программу run.exe
. Без этого ваша ассоциация бессмысленна, поскольку она функционирует просто как ярлык. Это не нужно, так как вы можете просто создать нормальный ярлык для run.exe
для той же цели.
Ваш пакетный файл также должен иметь %1
где-то внутри, чтобы путь и имя связанного файла (file.myext
) использовались внутри пакетного файла (предположительно, чтобы передать его в ваш mjar.jar
который будет что-то делать с файлом) , В противном случае, независимо от того, на каком связанном файле вы дважды щелкнете, вы всегда получите один и тот же результат из вашей Java-программы. Это снова бессмысленно, так как вы можете просто использовать ярлык для командного файла, чтобы служить той же цели.
Также важно заключить в кавычки %1
, так как пути к файлам могут содержать пробелы, а без кавычек ("
) эти пробелы могут разбивать путь на два или более аргумента (когда весь путь предполагается рассматривать как один аргумент).
Пример пакетного файла
Вот пакетный файл, который я преобразовал в exe
для тестирования. Он просто отображает значение %1
.
@echo %1
@pause
Ваш пакетный файл может быть таким, как показано ниже (чтобы mjar.jar
мог получить путь и имя файла, по которому вы дважды щелкнули ):
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar" "%1"
Я связал exe
файл с расширением .myext
(используя метод из моего совета 4), а затем проверил реестр, чтобы создать вышеупомянутый файл .reg
. Когда я дважды щелкаю по файлу с расширением .myext
, открывается командное окно, отображающее (команда echo
) путь и имя файла, по которому я дважды щелкнул (так мой тестовый пакетный файл использует связанный файл).
Java программа
(Это краткое изложение полного обсуждения в чате, которое в конечном итоге решило вашу проблему.) Ваша Java-программа, содержащаяся в mjar.jar
должна быть готова принять входящий аргумент и использовать его. Ваше намерение состоит в том, чтобы ваша программа автоматически открывала файл, на который ссылается входящий аргумент, и отображала его содержимое. Следовательно, main
метод должен быть примерно таким:
public static void main (String[] args) {
if (args.length >= 1) {
openFile(args[0]);
}
}
Метод openFile
- это метод, который открывает файл по переданному в него имени. Оператор if
гарантирует, что args[0]
читается только при наличии такого аргумента (исключая ArrayIndexOutOfBoundsException
). В приведенном выше коде используется только первый аргумент args[0]
; все остальные аргументы (args[1]
, args[2]
и т. д.) игнорируются. Метод openFile
будет выглядеть примерно так (дескрипторы и возвращаемые типы не включены):
openFile(String filename) {
// code here to open the file referred by "filename" variable,
// read its contents and display it on the GUI
// or use it in the program as intended
}
Если в вашей программе есть команда Open, встроенная в ее графический интерфейс, после того, как пользователь выберет файл с помощью этой команды, ваше приложение может использовать тот же метод openFile
чтобы открыть выбранный файл и отобразить его содержимое.
Предыдущий ответ
У меня пока нет окончательного ответа на вашу проблему , но вот несколько советов, с которых можно начать:
Вы пытались добавить цитаты? Вот так : @="\"C:\\...\\run.exe\" \"%1\""
В реестре значение (по умолчанию) будет выглядеть так: "C:\...\run.exe" "%1"
Прочтите официальный документ MSDN от Microsoft об ассоциации типов файлов. Вам также нужно будет прочитать о программных идентификаторах (ссылки в первом параграфе этого документа).
Попробуйте сначала связать ваш тип файла .myext
с Блокнотом. Узнайте, как Блокнот связан с файлами .txt
и следуйте примеру. Если все сделано правильно, Блокнот должен открыть файл file.myext
.
Вы можете узнать, как Windows делает это для вас. Щелкните правой кнопкой мыши file.myext
, выберите « Открыть с помощью»> «Выбрать программу по умолчанию ...» и нажмите « Обзор», чтобы найти файл run.exe
. Свяжитесь и откройте, затем исследуйте реестр Windows, чтобы узнать, как Windows хранила вашу ручную связь. Затем вы можете просто экспортировать тип файла и программный идентификатор в reg файлы.
^ Если file.myext
, нажмите « Открыть»> «Выбрать программу из списка установленных программ».
PS1: Очевидно, у вас должна быть двойная косая черта в файлах .reg.
PS2: Лучше напрямую редактировать материал в реестре, тестировать эффекты, затем экспортировать ключи в файлы .reg и объединять их в один файл, а не создавать файл .reg самостоятельно.