【问题标题】:How to create a shortcut to a folder on Windows?如何在 Windows 上创建文件夹的快捷方式?
【发布时间】:2020-11-18 05:38:54
【问题描述】:

我已经为可执行文件创建了快捷方式并且它可以工作,但是当我尝试为一个文件夹创建一个快捷方式时它不起作用。 它确实创建了一个快捷方式,它只是不正确的“目标类型”。请看下面的图片。 而不是“文件”,目标类型应该是“文件夹”。问题是,当我打开快捷方式时,它会询问我要使用哪个程序打开文件,但它没有打开文件夹。

我用来创建快捷方式的函数如下

from win32com.client import Dispatch
import winshell
import os

def create_shortcuts(self, tool_name, exe_path, startin, icon_path):

    shell = Dispatch('WScript.Shell')
    shortcut_file = os.path.join(winshell.desktop(), tool_name + '.lnk')
    shortcut = shell.CreateShortCut(shortcut_file)
    shortcut.Targetpath = exe_path
    shortcut.WorkingDirectory = startin
    shortcut.IconLocation = icon_path
    shortcut.save()

我不知道是否可以设置“目标类型”。我找不到办法,但我知道一定有办法。

【问题讨论】:

  • 我刚刚在 Windows 7 上使用 Python 3.6.1 运行了您的代码,它在我的桌面上创建了一个完全有效的文件夹快捷方式(当您单击打开它时,它可以正常工作)。创建的快捷方式的目标类型属性设置为File folderScreenshot.
  • 感谢@martineau,我在 windows server 2008 和 python 3.4.4 上运行了代码,但没有成功。知道为什么吗?或者如何解决?
  • 这可能是您传递给函数的参数不正确——很难判断,因为您没有包含调用失败的函数的示例。要记住的一件重要的事情是传递给函数的所有路径都必须包含反斜杠字符,这意味着如果它们是文字,您必须像这样将每个路径加倍:"C:\\path\\to\\some\\folder" 或使用 r 这样的字符串前缀 r"C:\path\to\some\folder" .
  • 这就是问题所在,我遗漏了一些反斜杠。由于路径在快捷方式属性的目标条目中正确显示,我不认为路径是问题,但它是。谢谢@martineau!
  • 很高兴听到这个消息。将来您应该提供MCVE 以允许其他人重现问题(而不是猜测),因为如果您这样做,您会得到更好的响应。

标签: python python-3.x python-winshell


【解决方案1】:

如果你想使用 .Net "clr"(特别是如果你已经需要它):

首先运行这个...你必须将这个命令的输出与你的应用一起发送

"c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\TlbImp.exe" %SystemRoot%\system32\wshom.ocx /out:Interop.IWshRuntimeLibrary.dll

如果您以相当标准的方式安装 Windows SDK,tlbimp.exe 甚至可能在路径中。但如果没有,没关系,您只需将“程序集”(.Net 领域中提供接口的 dll 的花哨词)随您的应用程序一起提供。

那么这段代码就可以在python中运行了:

import clr
sys.path.append(DIRECTORY_WHERE_YOU_PUT_THE_DLL)
clr.AddReference('Interop.IWshRuntimeLibrary')
import Interop.IWshRuntimeLibrary
sc = Interop.IWshRuntimeLibrary.WshShell().CreateShortcut("c:\\test\\sc.lnk")
isc = Interop.IWshRuntimeLibrary.IWshShortcut(sc)
isc.set_TargetPath("C:\\")
isc.Save()

....上面的代码,经过太多的修改和序言,甚至可能适用于 Mono。

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多