...为当前用户?为所有用户?如何获取开始菜单程序目录的路径?
我正在开发一个需要在开始菜单中创建链接的小程序。目前我像下面一样硬编码,但它只能在英文区域使用,例如它应该是德文的“Startmenü”。什么是更清洁,更便携的方法?
OUR_STARTMENU = os.environ['ALLUSERSPROFILE'] + '\Start Menu\Programs\Our Stuff'
谢谢
...为当前用户?为所有用户?如何获取开始菜单程序目录的路径?
我正在开发一个需要在开始菜单中创建链接的小程序。目前我像下面一样硬编码,但它只能在英文区域使用,例如它应该是德文的“Startmenü”。什么是更清洁,更便携的方法?
OUR_STARTMENU = os.environ['ALLUSERSPROFILE'] + '\Start Menu\Programs\Our Stuff'
谢谢
Environment.gov.au的朋友Luke Pinner通过使用核心模块(python 2.5+)的电子邮件给出了解决方案。相信是多语言的,因为来自API调用的返回是unicode。经测试Win7上使用日语语言环境,另一个美国英语机器上手动更改开始菜单指向%USERPROFILE%\开始菜单
''' Get windows special folders without pythonwin
Example:
import specialfolders
start_programs = specialfolders.get(specialfolders.PROGRAMS)
Code is public domain, do with it what you will.
Luke Pinner - Environment.gov.au, 2010 February 10
'''
#Imports use _syntax to mask them from autocomplete IDE's
import ctypes as _ctypes
from ctypes.wintypes import HWND as _HWND, HANDLE as _HANDLE,DWORD as _DWORD,LPCWSTR as _LPCWSTR,MAX_PATH as _MAX_PATH, create_unicode_buffer as _cub
_SHGetFolderPath = _ctypes.windll.shell32.SHGetFolderPathW
#public special folder constants
DESKTOP= 0
PROGRAMS= 2
MYDOCUMENTS= 5
FAVORITES= 6
STARTUP= 7
RECENT= 8
SENDTO= 9
STARTMENU= 11
MYMUSIC= 13
MYVIDEOS= 14
NETHOOD= 19
FONTS= 20
TEMPLATES= 21
ALLUSERSSTARTMENU= 22
ALLUSERSPROGRAMS= 23
ALLUSERSSTARTUP= 24
ALLUSERSDESKTOP= 25
APPLICATIONDATA= 26
PRINTHOOD= 27
LOCALSETTINGSAPPLICATIONDATA= 28
ALLUSERSFAVORITES= 31
LOCALSETTINGSTEMPORARYINTERNETFILES=32
COOKIES= 33
LOCALSETTINGSHISTORY= 34
ALLUSERSAPPLICATIONDATA= 35
def get(intFolder):
_SHGetFolderPath.argtypes = [_HWND, _ctypes.c_int, _HANDLE, _DWORD, _LPCWSTR]
auPathBuffer = _cub(_MAX_PATH)
exit_code=_SHGetFolderPath(0, intFolder, 0, 0, auPathBuffer)
return auPathBuffer.value
我听说过这样的2种方式。第一:
from win32com.shell import shell
shell.SHGetSpecialFolderPath(0,shellcon.CSIDL_COMMON_STARTMENU)
其次,使用WScript.Shell对象(源:http://www.mail-archive.com/[email protected]/msg00992.html):
import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserProgramsMenu = objShell.SpecialFolders("AllUsersPrograms")
userMenu = objShell.SpecialFolders("StartMenu")
的“另一个源”链接了一切,我一直在寻找! :) – panofish 2015-02-13 19:59:58
第一个示例不完整,'shellcon'未定义。导入行应该是'从win32com.shell导入shell,shellcon'可能? – 2015-04-28 10:10:13
此外,CSIDL_COMMON_STARTMENU是所有用户启动和CSIDL_STARTMENU用于电流用户启动。
供参考:我可以找到MS'SHGetFolderPath'的最佳参考是[here](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx) ,它注意到它不赞成使用['SHGetKnownFolderPath'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188(v = vs.85).aspx) – 2011-10-24 16:36:14