Một người bạn, Luke Pinner của Environment.gov.au, đã đưa ra giải pháp bằng email sử dụng mô-đun lõi (python 2.5+). Được tin là đa ngôn ngữ khi trả lại từ cuộc gọi API là unicode. Thử nghiệm trên Win7 với locale Nhật Bản, và trên một máy chúng tôi-tiếng anh bằng cách thay đổi bằng tay Start Menu để trỏ đến % USERPROFILE% \ startmenu
''' 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
Nguồn
2010-02-10 05:49:59
FYI: tài liệu tham khảo tốt nhất tôi có thể tìm thấy cho MS 'SHGetFolderPath' là [ở đây] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx) , lưu ý rằng nó không được dùng như Vista để ủng hộ ['SHGetKnownFolderPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188 (v = vs.85) .aspx) –