2010-01-14 11 views

Odpowiedz

8

Znalazłem a slightly different way of doing it. W ten sposób znajdziesz lokalizację różnych folderów systemowych i użyjesz prawdziwych słów zamiast identyfikatorów CLSID.

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

Inne foldery: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Pulpit, Ulubione, Czcionki, MyDocuments, NetHood, PrintHood, Najnowsze, SENDTO, StartMenu, Startup & Szablony

+0

Czy ta biblioteka jest udokumentowana w dowolnym miejscu? Strona SourceForge to tylko labirynt banerów reklamowych i pustych stron wiki. Szukam katalogu Program Files (lub, przynajmniej, jak to było nazywane pod Windows ... na szczęście nie musiałem zajmować się Windowsiem od bardzo dawna). "AllUsersPrograms" wydaje się zwracać ścieżkę do "Programy" w menu Start (co jest interesujące, ponieważ nie jestem pewien, czy znalazłem nawet menu Start w Windows Server 2012!) –

+0

@MIchael Scheper Obawiam się, że nie dotknąłem go, ponieważ zadałem to pytanie, a od tego czasu SourceForge znacznie się pogorszyło. Może spróbuj sprawdzić 'objShell' i sprawdzić, czy istnieje metoda wyświetlania wszystkich nazw' SpecialFolder'? –

+1

Dzięki. To, co do tej pory znalazłem, to http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/pywin32/com.html i, bardziej ogólnie, http://aspn.activestate.com/ASPN/docs/ ActivePython/2.4/pywin32/win32_modules.html oraz komentarz, który brzmi: "Pywin32 jest tak ściśle związany z wywoływaniami win32, że możesz po prostu spojrzeć na MSDN i użyć w nim składni w Pythonie". Nie zweryfikowałem jeszcze tego, ale może to pomoże innym właściwym organizacjom. –

4

Aby uzyskać folder "Moje dokumenty", należy można użyć:

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 

Od here.

Nie jestem pewien, jaka jest odpowiednik zaklęć magicznych dla "Program Files", ale to powinno wystarczyć, aby zacząć.

+0

W języku Python <3, tak. W Pythonie 3.1: >>> z importu win32com.shell skorupy Traceback (najnowsza wezwanie ostatni): Plik "", wiersz 1, w z win32com.shell shell import ImportError: No module o nazwie win32com. shell –

+2

Czy jest zainstalowany win32com? Dostępne są wersje dla Python 3.1 (zobacz http://sourceforge.net/projects/pywin32/files/) –

+0

[Edytuj] działa świetnie, dzięki! –

5

w Windows 7 mogę użyć następujących zmiennych środowiskowych w celu uzyskania dostępu do folderów, których potrzebuję:

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

Mam 7 w tej chwili i to działa ładnie. Czy wiesz, jak niezawodne jest to w przypadku korzystania z wielu platform? Dokumentacja nie jest zbyt pomocna. Dzięki. –

+0

Nie wiem niestety, panie Chimp, przepraszam. – cdiggins

0

wezwanie Windows API dla tej operacji, z Vista, jest SHGetKnownFolderPath. Istnieje opakowanie z licencją MIT (przy użyciu ctypes, więc nie ma zależności od pywin32) here.

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