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)
我有这个 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)