2017-10-13 158 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

相關問題