• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Создание ярлыков приложений и ресурсов в Интернет с помощью Python в ОС Windows

Не особенно часто, но иногда требуется создать ярлык для запуска приложения в операционной системе Windows. То есть, файл, который служит указателем на некий объект (программу, файл или команду). Наиболее частым местом для создания ярлыков служит «Рабочий стол». Давайте создадим ярлык для приложения или ссылки на «Рабочем столе» с помощью Python.

000.jpg

Ярлыки бывают нескольких типов, а соответственно имеют различные расширения. Например: ярлык, ссылающийся на ресурс в сети Интернет, имеет расширение «.url»; ярлык, привязанный к программе DOS, имеет расширение «.pif». А вот ярлыки, которые привязаны к файлу или каталогу уже являются бинарными файлами имеющими расширение «.lnk». В рамках данной статьи ярлыки имеющие привязку к программам DOS мы создавать не будем, да это и не требуется в нынешних реалиях. Рассмотрим создание ярлыков имеющих расширение «.url» и расширение «.lnk».


Что понадобиться?

Для того, чтобы можно было с легкостью определять путь к «Рабочему столу» пользователя, установим библиотеку winshell. Впрочем, на этом её функции далеко не заканчиваются, и использовать её мы будем не только с этой целью. Подробнее об этой библиотеке можно почитать в . Для её установки пишем в терминале команду:

pip install winshell


Создание ярлыка для ресурса в Интернет

Для создания ярлыка на ресурс в Интернет требуется написать буквально пару строк кода. Не считая блока импорта. Как вы помните, такие ярлыки имеют расширение «.url». По сути, это обычные текстовые файлы с расширением, которое указывает операционной системе, что делать с данным типом файла. Данный файл имеет следующую структуру:

Код:
[InternetShortcut]
URL=https://codeby.net/

Первой идет секция, которая указывает, что это ярлык Интернет, второй – ссылка на конкретный ресурс.
Реализуем это в коде.
Импортируем нужные библиотеки. Как видите, здесь открывается файл на запись, передается полный путь к расположению ярлыка.
Именно здесь мы используем winshell и её модуль desktop, а дальше, записываем рассмотренные выше строки.

Python:
# pip install winshell

from pathlib import Path

from winshell import desktop

with open(Path(desktop()) / "Codeby.url", 'w', encoding='utf-8') as file:
    file.write('[InternetShortcut]\nURL=https://codeby.net/')

Таким образом, можно легко создать ярлык, у которого не будет иконка по умолчанию. В данном случае, хоть ярлык и указывает на ресурс в Интернет, если у вас не настроено приложение по умолчанию для открытия такого типа ярлыков, операционная система при каждом открытии будет запрашивать приложение, с помощью которого требуется открыть данный файл. Так как здесь нет определенной привязки.

01.png

02.png

Двигаемся дальше и рассмотрим создание ярлыка для приложения.


Создание ярлыка для приложения

Что потребуется?


Помимо уже установленной библиотеки winshell, в данном примере потребуется установить библиотеку pywin32. Именно с её помощью мы будем создавать ярлык для приложения. Для установки библиотек используем команду:

pip install pywin32 winshell

Импортируем нужные библиотеки в скрипт:

Python:
from pathlib import Path

from winshell import desktop
from win32com.client import Dispatch

Создадим функцию create_shortcut(path, target=''), в которую будем передавать полный путь к создаваемому ярлыку с расширением, а также путь к целевому приложению, для его открытия с помощью ярлыка. При необходимости в данную функцию можно передать рабочую директорию приложения, а также путь к иконке, которая будет установлена для ярлыка. Мы же этого делать не будем, а возьмем рабочую директорию из пути к приложению. Иконку для ярлыка мы также будем получать из исполняемого файла приложения.

Теперь вызовем Dispatch('WScript.Shell'), чтобы получить объект оболочки, который будет использоваться для создания ярлыка. Затем вызовем метод CreateShortCut, в который передадим полный путь к ярлыку приложения на рабочем столе. Определим путь к приложению с помощью параметра Targetpath, рабочую директорию WorkingDirectory, которую получим из полного пути к исполняемому файлу приложения и путь к иконке – IconLocation, которую будем брать из исполняемого файла, а значит, путь к иконке будет в данном случае равен target. И в конце вызовем метод save, чтобы сохранить созданный объект ярлыка.

Python:
def create_shortcut(path, target=''):
    shell = Dispatch('WScript.Shell')
    shortcut = shell.CreateShortCut(str(path))
    shortcut.Targetpath = target
    shortcut.WorkingDirectory = str(Path(target).parent)
    shortcut.IconLocation = target
    shortcut.save()

Теперь вызовем данную функцию с передачей в нее необходимых параметров. Для примера, создадим ярлык для плеера VLC.

create_shortcut(Path(desktop()) / "VLC Player.lnk", r"C:\Program Files\VideoLAN\VLC\vlc.exe")

Таким образом, будет создан ярлык, с помощью которого можно полноценно запускать плеер.

03.png

Python:
# pip install pywin32 winshell

from pathlib import Path

from winshell import desktop
from win32com.client import Dispatch


def create_shortcut(path, target=''):
    shell = Dispatch('WScript.Shell')
    shortcut = shell.CreateShortCut(str(path))
    shortcut.Targetpath = target
    shortcut.WorkingDirectory = str(Path(target).parent)
    shortcut.IconLocation = target
    shortcut.save()


create_shortcut(Path(desktop()) / "VLC Player.lnk", r"C:\Program Files\VideoLAN\VLC\vlc.exe")

Но, что делать, если нам необходимо указать для ярлыка Интернет, чтобы он открывался с помощью конкретного браузера? Здесь все просто. Нужно задать путь к нужному браузеру, а также в качестве передаваемых аргументов ярлыка указать ссылку на нужную страницу. В этом случае, нужно уже создавать не ярлык с расширением «.url», а полноценный ярлык, указывающий на конкретное приложение, то есть имеющий расширение «.lnk». В этом случае, по сути, создание ярлыка для Интернет не будет отличаться от создания ярлыка для обычного приложения.

Создадим скрипт, который будет определять путь к браузеру по умолчанию и создавать ссылку на ресурс в Интернет уже с открытием в конкретном браузере. По сути, данная функция будет универсальной как для создания ярлыков для приложений, так и для создания ярлыков на ресурсы в Интернет.


Определение браузера по умолчанию

Начнем мы с того, что напишем функцию для определения браузера, который используется в операционной системе по умолчанию. Будь то Google Chrome, Firefox или Яндекс.Браузер.

Создадим функцию browser_default(). Браузер по умолчанию устанавливается пользователем. Поэтому, заглянем в ключ реестра «HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice», и заберем из параметра «ProgId» ID-браузера в реестре. Затем перейдем к ключу реестра HKEY_CLASSES_ROOT, подставим в путь полученный ID браузера. И перейдем глубже к ветке command: shell\open\command.

Заберем путь к исполняемому файлу браузера, удалим аргумент запуска «--single-argument %1», он нам не понадобиться и вернем путь к исполняемому файлу браузера по умолчанию.

Python:
def browser_default():
    br_choice = wrg.OpenKeyEx(wrg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations"
                                                     r"\https\UserChoice")
    br_name = wrg.QueryValueEx(br_choice, 'ProgId')[0]
    br_com = wrg.OpenKeyEx(wrg.HKEY_CLASSES_ROOT, f"{br_name}\\shell\\open\\command")
    return wrg.QueryValueEx(br_com, '')[0].split('"')[1]


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

Создадим функцию create_shortcut(path, target='', arguments='', icon=''), в которую будем передавать полный путь к создаваемому ярлыку, путь к исполняемому файлу, путь к иконке для ярлыка. В случае с браузером по умолчанию, путь к исполняемому файлу браузера. А так как функция универсальная, для создания ярлыка для любого приложения или файла, то передать сюда можно путь к любому целевому файлу. И аргументы, которые требуются для запуска исполняемого файла. В случае с браузером, в качестве аргумента будет передаваться ссылка на ресурс в Интернет. В случае с другими приложениями, то либо оставляем пустое значение по умолчанию, либо передаем параметры, которые необходимы.

Здесь, для создания ярлыка мы будем использовать метод CreateShortcut из библиотеки winshell. Передаем в данный метод необходимые параметры: полный путь к создаваемому ярлыку; полный путь к исполняемому файлу приложения; аргументы для запуска приложения; рабочую директорию, которая в данном случае будет равна родительской директории приложения; путь к иконке приложения, который в данном случае будет равен пути к исполняемому файлу, так как иконку мы будем брать из него. Но, вы можете задать путь к своей иконке.

Python:
def create_shortcut(path, target='', arguments='', icon=''):
    if not icon:
        icon = target
    CreateShortcut(
        Path=str(path),
        Target=target,
        Arguments=arguments,
        StartIn=str(Path(target).parent),
        Icon=(f"{icon}", 0)
    )

Python:
# pip install winshell

import winreg as wrg
from pathlib import Path

from winshell import desktop, CreateShortcut


def browser_default():
    br_choice = wrg.OpenKeyEx(wrg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations"
                                                     r"\https\UserChoice")
    br_name = wrg.QueryValueEx(br_choice, 'ProgId')[0]
    br_com = wrg.OpenKeyEx(wrg.HKEY_CLASSES_ROOT, f"{br_name}\\shell\\open\\command")
    return wrg.QueryValueEx(br_com, '')[0].split('"')[1]


def create_shortcut(path, target='', arguments='', icon=''):
    if not icon:
        icon = target
    CreateShortcut(
        Path=str(path),
        Target=target,
        Arguments=arguments,
        StartIn=str(Path(target).parent),
        Icon=(f"{icon}", 0)
    )


create_shortcut(Path(desktop()) / "VLC Player.lnk", r"C:\Program Files\VideoLAN\VLC\vlc.exe")
create_shortcut(Path(desktop()) / "Codeby.lnk", browser_default(), "https://codeby.net/")

В результате мы создадим два ярлыка. Вот как это выглядит на скриншоте:

04.png


А теперь немного подытожим. В данной статье мы рассмотрели создание ярлыков различного типа, как «.url», так и «.lnk». Для последних было рассмотрено два метода их создания. А также создали функцию для получения браузера по умолчанию из реестра операционной системы Windows.

Для примера, можно создать небольшое приложение, которое будет в запущенном состоянии проверять то, что вы копируете в буфер обмена и, если в нем будет обнаружено, что вы скопировали ссылку на ресурс, автоматически создавать ярлык в заранее определенной вами директории.

Однако, напомню еще раз, что данные функции и библиотеки будут работать только в операционной системе Windows.

А на этом, пожалуй, все.

Спасибо за внимание. Надеюсь, информация будет вам полезна
 

Вложения

  • shortcut_create.zip
    1,4 КБ · Просмотры: 106
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!