2017-10-13 157 views
0

所以我有一个Python程序编写,我想要做的是创建Windows程序的快捷方式,并确保在运行该快捷方式时,不仅软件运行,而且当前目录的快捷方式是at会通过sys.argv,这样我就可以在程序中做些什么。我知道,对于Windows快捷方式,你可以这样做:如何在Windows快捷方式目标中传递当前目录?

"C:\Documents and Settings\Administrator\Desktop\hello.py" --somevalue 

将参数传递给目标。我想知道如何才能使它适用于我的具体情况?例如,如果我们在桌面上放置快捷方式,并运行快捷方式,则Python软件将以sys.argv[1]="C:\Users\username\Desktop"开头。

+0

我不认为有任何方法可以将它作为参数传递。你不想要当前目录(可以通过['os.getcwd()'](https://docs.python.org/3/library/os.html#os.getcwd)脚本本身)。你需要的是一种方式,它不仅可以检测到它是从快捷方式而不是直接运行的,而且还可以检测到使用的快捷方式的位置。我怀疑这也是可能的。 – martineau

+0

为什么你确实需要这些信息? – martineau

+0

您可以在快捷方式中设置当前工作目录。没有必要将它作为命令行参数传递。 – IInspectable

回答

2

您可以在.LNK中为执行的应用程序指定当前目录,这是在依赖特定目录时执行操作的常规方式。

如果你因为某些原因确实需要获得有关信息.LNK你必须调用GetStartupInfo的Windows函数(ctypes我假设),如果STARTF_TITLEISLINKNAME位在STARTUPINFO.dwFlags设置,那么STARTUPINFO.lpTitle包含路径的.LNK用户用于启动应用程序。

+1

用ctypes并不难,但用PyWin32安装就更简单了:'import win32process;''STARTF_TITLEISLINKNAME = 0x800;''si = win32process.GetStartupInfo();''linkname = si.lpTitle if si.dwFlags&STARTF_TITLEISLINKNAME else None '。 – eryksun

+0

@eryksun嘿,谢谢你的建议,但我试过这个,并且它总是返回linkname = None,当我试图直接访问软件或者通过快捷方式 –

+0

@HansongLi,.py扩展名可能与py [w] .exe发射器。它执行python [w] .exe作为子进程,由'lpTitle'创建为'NULL',它使用python [w] .exe可执行文件路径作为标题。这将不会有'STARTF_TITLEISLINKNAME'标志,这就是为什么上述表达式将'linkname'设置为'None'的原因。我想启动程序可以调用'GetStartupInfo'来从它自己的启动信息中代理一些细节。作为一种解决方法,您需要使用脚本作为参数的python [w] .exe(即'sys.executable')的完全限定路径来创建快捷方式。 – eryksun

相关问题