win32ui win32print tutorial pywin64 pyhook python windows pywin32

win32print - Python, obtenga carpetas especiales de Windows para el usuario que ha iniciado sesión actualmente



pywin64 (5)

¿Cómo puedo obtener carpetas especiales de Windows como Mis documentos, Escritorio, etc. desde mi script de Python? ¿Necesito extensiones de win32?

Debe funcionar en Windows 2000 a Windows 7.


Intente winshell (hecho exactamente para este propósito):

import winshell print ''Desktop =>'', winshell.desktop () print ''Common Desktop =>'', winshell.desktop (1) print ''Application Data =>'', winshell.application_data () print ''Common Application Data =>'', winshell.application_data (1) print ''Bookmarks =>'', winshell.bookmarks () print ''Common Bookmarks =>'', winshell.bookmarks (1) print ''Start Menu =>'', winshell.start_menu () print ''Common Start Menu =>'', winshell.start_menu (1) print ''Programs =>'', winshell.programs () print ''Common Programs =>'', winshell.programs (1) print ''Startup =>'', winshell.startup () print ''Common Startup =>'', winshell.startup (1) print ''My Documents =>'', winshell.my_documents () print ''Recent =>'', winshell.recent () print ''SendTo =>'', winshell.sendto ()


Puedes hacerlo con las extensiones pywin32:

from win32com.shell import shell, shellcon print shell.SHGetFolderPath(0, shellcon.CSIDL_MYPICTURES, None, 0) # prints something like C:/Documents and Settings/Username/My Documents/My Pictures # (Unicode object)

Compruebe shellcon.CSIDL_xxx para otras carpetas posibles.

Creo que usar pywin32 es la mejor manera. De lo contrario, tendría que usar ctypes para acceder a la función SHGetFolderPath alguna manera (otras soluciones podrían ser posibles, pero estas son las que conozco).


Si desea hacerlo sin las extensiones win32, puede usar ctypes para llamar a SHGetFolderPath :

>>> import ctypes.wintypes >>> CSIDL_PERSONAL= 5 # My Documents >>> SHGFP_TYPE_CURRENT= 0 # Want current, not default value >>> buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH) >>> ctypes.windll.shell32.SHGetFolderPathW(0, CSIDL_PERSONAL, 0, SHGFP_TYPE_CURRENT, buf) 0 >>> buf.value u''C://Documents and Settings//User//My Documents''


Un poco hacky, pero sin la necesidad de una importación especial

import os os.popen(''echo %appdata%'').read().strip()


import win32com.client oShell = win32com.client.Dispatch("Wscript.Shell") print oShell.SpecialFolders("Desktop")