2010-01-14 11 views

Répondre

8

J'ai trouvé a slightly different way of doing it. De cette façon, vous obtiendrez l'emplacement de divers dossiers système et utiliserez des mots réels au lieu de CLSID.

import win32com.client 
objShell = win32com.client.Dispatch("WScript.Shell") 
allUserDocs = objShell.SpecialFolders("AllUsersDesktop") 
print allUserDocs 

Autres dossiers disponibles: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, DemarrageTousUtil, Bureau, Favoris, Fonts, MYDOCUMENTS, Nethood, PrintHood, récents, SendTo, StartMenu, démarrage & Modèles

+0

Cette bibliothèque est-elle documentée quelque part? Le site SourceForge est juste un labyrinthe de bannières publicitaires et de wikis vides. Je cherche le répertoire Program Files (ou, du moins, c'est ce que l'on appelait sous Windows ... heureusement, je n'ai pas eu à faire face à Windows depuis très longtemps). 'AllUsersPrograms' semble retourner le chemin vers 'Programmes' sous le menu Démarrer (ce qui est intéressant, car je ne suis pas sûr d'avoir trouvé le menu Démarrer dans Windows Server 2012!) –

+0

@MIchael Scheper J'ai peur Je ne l'ai pas touché depuis que j'ai posé cette question et SourceForge est descendu sévèrement depuis. Peut-être essayer d'inspecter 'objShell' et voir s'il y a une méthode pour voir tous les noms' SpecialFolder'? –

+1

Merci. Ce que j'ai trouvé jusqu'à présent est http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/pywin32/com.html et, plus généralement, http://aspn.activestate.com/ASPN/docs/ ActivePython/2.4/pywin32/win32_modules.html, et un commentaire qui lit 'Pywin32 est lié si étroitement aux appels win32 que vous pouvez essentiellement simplement regarder sur MSDN et utiliser la syntaxe là en Python, pour la plupart. Je ne l'ai pas encore vérifié, mais peut-être que cela aidera à mettre les autres SO sur la bonne voie. –

4

Pour obtenir le dossier "Mes Documents", vous peut utiliser:

from win32com.shell import shell 
df = shell.SHGetDesktopFolder() 
pidl = df.ParseDisplayName(0, None, 
    "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1] 
mydocs = shell.SHGetPathFromIDList(pidl) 
print mydocs 

De here. Je ne suis pas sûr de ce que l'incantation magique équivalente est pour "Program Files", mais cela devrait, espérons-le, être suffisant pour vous aider à démarrer.

+0

En Python <3, oui. En Python 3.1: >>> de coquille d'importation win32com.shell retraçage (le plus récent appel dernier): Fichier "", ligne 1, en de coquille d'importation win32com.shell ImportError: Aucun module nommé win32com. shell –

+2

win32com est-il installé? Il existe des versions disponibles pour Python 3.1 (voir http://sourceforge.net/projects/pywin32/files/) –

+0

[Edit] qui fonctionne très bien, merci! –

5

Dans Windows 7 je peux utiliser les variables d'environnement suivantes pour accéder aux dossiers dont j'ai besoin:

>>> import os 
>>> os.environ['USERPROFILE'] 
'C:\\Users\\digginc' 
>>> os.environ['PROGRAMFILES'] 
'C:\\Program Files' 
+0

Je suis sur 7 en ce moment et cela fonctionne bien. Savez-vous comment cela est fiable pour une utilisation multi-plateforme? La documentation n'est pas beaucoup d'aide. Merci. –

+0

Je ne sais pas malheureusement M. Chimp, désolé. – cdiggins

0

L'appel API Windows pour ce faire, de Vista, est SHGetKnownFolderPath. Il y a un wrapper sous licence MIT (en utilisant ctypes, donc pas de dépendances sur pywin32) here.

>>> from knownpaths import * 
>>> get_path(FOLDERID.ProgramFilesX86) 
u'C:\\Program Files (x86)'