来自python的Windows特殊文件夹和已知文件夹(开始菜单,下载,...)

时间:2015-04-27 05:47:00

标签: python special-folders known-folders

在python中确定Windows 路径的最佳方法是什么?

我已经为SpecialFolders发现了几种流行的方法,a.k.a CSIDL,但KNOWNFOLDERID还没有直截了当的方法。保持向后兼容性,因此CSIDL方法仍然有效,但是自那时起不会枚举自Windows XP以来引入的任何特殊/已知文件夹。 “新”不可用的示例包括下载,播放列表,程序文件x64。

特殊文件夹

  • Find system folder locations in Python - 最简单的CSIDL方法,依赖于win32com,适用于 AllUsersDesktop,AllUsersStartMenu,AllUsersPrograms,AllUsersStartup,桌面,收藏夹,字体,MyDocuments,NetHood,PrintHood,Recent,SendTo,StartMenu ,初创公司模板(列表可能不完整)。

  • How to get path of Start Menu's Programs directory? - 采用与上述相同的方法,以及直接使用ctypes的方法,因此不需要win32com(不那么明确或直截了当)

已知文件夹

两者合二为一

1 个答案:

答案 0 :(得分:2)

您可以像解决这个问题一样解决这个问题:首先,您可以在C ++,C#或VB中找到文档和理想情况下的一些不错的示例代码,然后您将弄清楚如何使用PyWin32来生成相同的shell API或{{ 1}}来自Python的COM调用。

正如Known Folders上的MSDN概述文档所述,您可以使用新的shell包装函数SHGetKnownFolderPath而不是旧的IKnownFolderSHFolderPath,或者您可以使用通过COM完成IKnownFolderManager接口。

不幸的是,我面前没有Windows机器,MSDN的示例下载没有响应,所以我不得不做一些猜测。但它可能是这样的:

SHGetFolderPath

如果from win32com.shell import shell, shellcon path = shell.SHGetKnownFolderPath(shellcon.FOLDERID_AccountPictures, 0, # see KNOWN_FOLDER_FLAG 0) # current user 没有shellcon值,则必须在KNOWNFOLDERID上查找它们并定义自己需要的常量。

如果FOLDERID没有shell功能,则必须实例化SHGetKnownFolderPath并致电IKnownFolderManager

如果GetFolderByName甚至没有shell ...但是Google会快速显示it was added in build 218,那么这不会成为问题。

如果您宁愿通过IKnownFolderManager而不是ctypes进行此操作,它看起来会像这样(再次,未经测试,因为我没有Windows框,MSDN的服务器已损坏):< / p>

win32com