如何获取开始菜单的程序目录的路径?

mat*_*kie 6 python windows

...对于当前用户?对所有用户?

我正在开发一个小程序,需要在开始菜单中创建链接.目前我正在硬编码如下,但它只适用于英语语言环境,例如它应该是德语中的"Startmenü".什么是更清洁,更便携的方法?

OUR_STARTMENU = os.environ['ALLUSERSPROFILE'] + '\Start Menu\Programs\Our Stuff'
Run Code Online (Sandbox Code Playgroud)

谢谢

Lau*_*tin 10

我听说有两种方法可以做到这一点.第一:

from win32com.shell import shell
shell.SHGetSpecialFolderPath(0,shellcon.CSIDL_COMMON_STARTMENU)
Run Code Online (Sandbox Code Playgroud)

其次,使用WScript.Shell对象(来源:http://www.mail-archive.com/python-win32@python.org/msg00992.html):

import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserProgramsMenu = objShell.SpecialFolders("AllUsersPrograms")
userMenu = objShell.SpecialFolders("StartMenu")
Run Code Online (Sandbox Code Playgroud)

另一个来源:http://blogs.msdn.com/saveenr/archive/2005/12/28/creating-a-start-menu-shortcut-with-powershell-and-python.aspx


mat*_*kie 1

一位朋友,Environment.gov.au 的 Luke Pinner,通过电子邮件给出了一个使用核心模块(python 2.5+)的解决方案。相信是多语言的,因为 API 调用的返回结果是 unicode。在具有日语语言环境的 Win7 上进行了测试,并在另一台美式英语计算机上进行了测试,方法是手动将“开始”菜单更改为指向%USERPROFILE%\\Startmen\xc3\xbc

\n\n
''' Get windows special folders without pythonwin\n    Example:\n            import specialfolders\n            start_programs = specialfolders.get(specialfolders.PROGRAMS)\n\nCode is public domain, do with it what you will. \n\nLuke Pinner - Environment.gov.au, 2010 February 10\n'''\n\n#Imports use _syntax to mask them from autocomplete IDE's\nimport ctypes as _ctypes\nfrom 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\n_SHGetFolderPath = _ctypes.windll.shell32.SHGetFolderPathW\n\n#public special folder constants\nDESKTOP=                             0\nPROGRAMS=                            2\nMYDOCUMENTS=                         5\nFAVORITES=                           6\nSTARTUP=                             7\nRECENT=                              8\nSENDTO=                              9\nSTARTMENU=                          11\nMYMUSIC=                            13\nMYVIDEOS=                           14\nNETHOOD=                            19\nFONTS=                              20\nTEMPLATES=                          21\nALLUSERSSTARTMENU=                  22\nALLUSERSPROGRAMS=                   23\nALLUSERSSTARTUP=                    24\nALLUSERSDESKTOP=                    25\nAPPLICATIONDATA=                    26\nPRINTHOOD=                          27\nLOCALSETTINGSAPPLICATIONDATA=       28\nALLUSERSFAVORITES=                  31\nLOCALSETTINGSTEMPORARYINTERNETFILES=32\nCOOKIES=                            33\nLOCALSETTINGSHISTORY=               34\nALLUSERSAPPLICATIONDATA=            35\n\ndef get(intFolder):\n    _SHGetFolderPath.argtypes = [_HWND, _ctypes.c_int, _HANDLE, _DWORD, _LPCWSTR]\n    auPathBuffer = _cub(_MAX_PATH)\n    exit_code=_SHGetFolderPath(0, intFolder, 0, 0, auPathBuffer)\n    return auPathBuffer.value\n
Run Code Online (Sandbox Code Playgroud)\n