python3.6 使用 unicode 创建 win32 快捷方式

python3.6 create win32 shortcut with unicode

我有这个 python3.6 创建 Windows 快捷方式的代码:

from win32com.client import Dispatch
path_to_target = r"C:\Program Files\ピチャーム\pycharm64.exe"
path_to_shortcut = r"C:\Program Files\pycharm.lnk"
shell = Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(path_to_shortcut)
            
shortcut.Targetpath = path_to_target  # exception here
shortcut.save()

如果 path_to_target 包含任何非 ascii 字符,我会得到一个异常:Property '<unknown>.Targetpath' can not be set.

如果 path_to_target 只是 ascii 字符,代码可以正常工作并创建正确的快捷方式。

如何创建指向具有 unicode 字符的目标的快捷方式?

是否有其他 API 来创建 Windows 快捷方式?

这可以通过确保不使用 shell 而直接 ShellLink 对象

来完成
import comtypes
import comtypes.shelllink
import comtypes.client
import comtypes.persist

shortcut = comtypes.client.CreateObject(comtypes.shelllink.ShellLink)
shortcut_w = shortcut.QueryInterface(comtypes.shelllink.IShellLinkW)
shortcut_file = shortcut.QueryInterface(comtypes.persist.IPersistFile)

shortcut_w.SetPath ("C:\Temp\हिंदी टायपिंग.txt")
shortcut_file.Save("C:\Temp\हिंदी.lnk", True)

更新 1

感谢@Axois 的评论,如果您设置了 unicode 支持,我已验证您的原始代码有效

PS:this 问题中的评论为我指明了正确的方向

请尝试 pythoncom,它与 Unicode 兼容。也不是快捷方式的目标目录必须事先存在。

使用 python 3.6 64 位

测试
import os
import pythoncom
from win32com.shell import shell

shortcut_dir = r"C:\test\ピチャーム"
if not os.path.exists(shortcut_dir):
    os.makedirs(shortcut_dir)

path_to_shortcut = shortcut_dir + r"\_test.lnk"
path_to_target = r"C:\test\target.exe"

shortcut = pythoncom.CoCreateInstance(
    shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
persist_file = shortcut.QueryInterface (pythoncom.IID_IPersistFile)
shortcut.SetPath(path_to_target)
persist_file.Save (path_to_shortcut, 0)