Создание файла ярлыка из Java

Одна проблема, которая озадачивала меня уже несколько недель, заключается в том, как я могу создать файл ярлыка из Java. Теперь, прежде чем я скажу что-нибудь еще, я просмотрел весь Google (и также на этом сайте, включая это: Создание ссылок ссылок (.lnk) из Java), пытаясь найти что-то полезное. Мне нужен не пакет установщика, который создает ярлык, а создание ярлыка из кода. Под ярлыком я подразумеваю файл.lnk, который обычно находится на рабочем столе.

Одна из полезных вещей, которые я нашел, была эта программа:

Java-код:

import java.io.*;       
public class WindowsUtils {     
     private WindowsUtils() { }
     private static final String WINDOWS_DESKTOP = "Desktop";
     public static String getWindowsCurrentUserDesktopPath() { //return the current user desktop path
         return System.getenv("userprofile") + "/" + WINDOWS_DESKTOP ;
     }
     public static void createInternetShortcutOnDesktop(String name, String target) throws IOException {
         String path = getWindowsCurrentUserDesktopPath() + "/"+ name + ".URL";
         createInternetShortcut(name, path, target, "");
     }
     public static void createInternetShortcutOnDesktop(String name, String target, String icon) throws IOException {
         String path = getWindowsCurrentUserDesktopPath() + "/"+ name + ".URL";
         createInternetShortcut(name, path, target, icon);
     }
     public static void createInternetShortcut(String name, String where, String target, String icon) throws IOException {
         FileWriter fw = new FileWriter(where);
         fw.write("[InternetShortcut]\n");
         fw.write("URL=" + target + "\n");
         if (!icon.equals("")) {
             fw.write("IconFile=" + icon + "\n");*
         }
         fw.flush();
         fw.close();
     }
     public static void main(String[] args) throws IOException {
         WindowsUtils.createInternetShortcutOnDesktop("GOOGLE", "http://www.google.com/");
     }
}

Я поиграл с ним и сумел создать ярлык.lnk на своем рабочем столе. Однако я столкнулся с двумя проблемами:

Я не мог изменить значок, несмотря на путь, связывающий его с правильным значком. Я сделал путь, который привел меня к C:/Users/USER/Documents, однако всякий раз, когда я нажимал на ярлык, он переходил в C:/. Когда я удаляю ярлык, диалог показывает мне, что путь к файлу:////C:/Users/USER/Documents.

Я знаю, что приведенный выше код изначально предназначался для создания ярлыков Интернета, поэтому я считаю, что, возможно, принял неправильный подход. Буду признателен за любую помощь / ссылки, которые вы можете дать мне.

4 ответа

Я могу рекомендовать этот репозиторий на GitHub:

https://github.com/BlackOverlord666/mslinks

Там я нашел простое решение для создания ярлыков:

ShellLink.createLink("path/to/existing/file.txt", "path/to/the/future/shortcut.lnk");

Если вы хотите прочитать ярлыки:

File shortcut = ...;
String pathToExistingFile = new ShellLink(shortcut).resolveTarget();

Если вы хотите изменить значок ярлыка, используйте:

ShellLink sl = ...;
sl.setIconLocation("/path/to/icon/file");

Надеюсь, это поможет вам:)

С уважением

Джосуа Франк

Я знаю, что немного опаздываю на вечеринку, мне очень нравятся реализации JShellLink, показанные выше, но если вам нужно что-то попроще, то то, что я написал:
https://github.com/JacksonBrienen/VBS-Shortcut/blob / main / src / vbs_sc / ShortcutFactory.java
должен помочь. Подводя итог, это простой создатель ярлыков, который использует VBS, запускаемый через CMD.
После этого создать ярлык на рабочем столе будет так же просто, как:

      ShortcutFactory.createDesktopShortcut("C:/Program Files/Internet Explorer/iexplore.exe", "Shortcut.lnk");

Я запустил ваш код, и он отлично работает для меня. Я могу нажать на ссылку, и браузер запускается с google.com. Я также могу редактировать значок. Я использую Win 7 и мой браузер по умолчанию Firefox 16.0.2.

http://www.mindfiresolutions.com/Creating-shortcut-from-a-Java-Application-1712.php

Хорошее и простое руководство по использованию jni с использованием библиотеки jShellLink

Другие вопросы по тегам