Задать вопрос
@AndrewSHkod

Как добавить опцию в контекстное меню для Internet Shortcuts?

При добавлении опции в контекстное меню для иконок разных типов этот код работает нормально:

with reg.CreateKey(reg.HKEY_CURRENT_USER, base_path) as main_key:
    reg.SetValueEx(main_key, 'MUIVerb', 0, reg.REG_SZ, 'New Item')
    with reg.CreateKey(main_key, 'command') as cmd_key:
        reg.SetValue(cmd_key, '', reg.REG_SZ, r'"C:\...\app.exe" "%1"')

Для файлов типа .txt, .png и т.д. я использовал base_path = "SOFTWARE\\Classes\\*\\shell\\NewItem"
Для папок — base_path = "SOFTWARE\\Classes\\Directory\\shell\\NewItem"
Для .lnk файлов — base_path = "SOFTWARE\\Classes\\lnkfile\\shell\\NewItem"
Вопрос: Какой base_path нужно использовать для Internet Shortcut (URL-ярлыков)?
Я пробовал:
base_path = "SOFTWARE\\Classes\\InternetShortcut\\shell" — не сработало (опция не добавилась) .
Вариант с .url (например, SOFTWARE\\Classes\\.url\\shell\\NewItem) — тоже не помогло.
  • Вопрос задан
  • 156 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@AndrewSHkod Автор вопроса
Решение с добавлением NewItem в InternetShortcut в большинстве случаев будет работать, поскольку ProgId файлов с расширением .url по умолчанию равен InternetShortcut, но бывают случаи когда ProgId может быть равен другому значению.
В моём случае ProgId был установлен как IE.AssocFile.URL, но он также может быть, например, ChromeHTML, FirefoxURL, OperaHTML и т. д.
Значение ProgId хранится в реестре по следующему пути:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\UserChoice]
"ProgId" = "Your Value"
Таким образом, код python сначала должен получить значение ProgId, а уже затем добавить NewItem в соответствующий раздел реестра.
key_path = r"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.url\UserChoice"

with reg.OpenKey(reg.HKEY_CURRENT_USER, key_path) as k:
    progid = reg.QueryValueEx(k, "ProgId")[0]
    print("Current ProgID:", progid)


base_path = r"SOFTWARE\\Classes\\" + progid + r"\\shell\\NewItem"

with reg.CreateKey(reg.HKEY_CURRENT_USER, base_path) as main_key:
    reg.SetValueEx(main_key, 'MUIVerb', 0, reg.REG_SZ, 'New Item')
    with reg.CreateKey(main_key, 'command') as cmd_key:
        reg.SetValue(cmd_key, '', reg.REG_SZ, r'"C:\...\app.exe" "%1"')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@robothot
.url-файлы обрабатываются через тип InternetShortcut, но Shell не использует ветку InternetShortcut\shell, а вместо этого — ветку ShellEx\ContextMenuHandlers, в отличие от файлов .txt, .png и т.п.

Поэтому добавление через shell\NewItem не сработает для .url ярлыков.

Используй:

import winreg as reg

base_path = r"SOFTWARE\Classes\SystemFileAssociations\.url\shell\NewItem"

with reg.CreateKey(reg.HKEY_CURRENT_USER, base_path) as main_key:
    reg.SetValueEx(main_key, 'MUIVerb', 0, reg.REG_SZ, 'New Item for .url')
    with reg.CreateKey(main_key, 'command') as cmd_key:
        reg.SetValue(cmd_key, '', reg.REG_SZ, r'"C:\Path\To\app.exe" "%1"')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы