选择任意文件夹作为浏览的起始文件夹(win32gui、win32com、SHGetFolderLocation)

Posted

技术标签:

【中文标题】选择任意文件夹作为浏览的起始文件夹(win32gui、win32com、SHGetFolderLocation)【英文标题】:select any folder as startfolder for browsing (win32gui,win32com, SHGetFolderLocation) 【发布时间】:2018-06-11 11:09:54 【问题描述】:

我想从一个文件夹开始,例如C:\test而不是任何预定义的 CSIDL_* 文件夹。 我怎样才能做到这一点?

    ''' python 3.6.2 '''

    import os
    import win32gui
    from win32com.shell import shell, shellcon

    myfolder_pidl = shell.SHGetFolderLocation (0, shellcon.CSIDL_DESKTOP, 0, 0)

    pidl, display_name, image_list = shell.SHBrowseForFolder (
      win32gui.GetDesktopWindow (),
      myfolder_pidl,
      "Select a file or folder",
      0x00014050, #shellcon.BIF_BROWSEINCLUDEFILES and some more
      None,
      None
    )

    if (pidl, display_name, image_list) == (None, None, None):
        print ('Nothing selected')
    else:
        my_path = shell.SHGetPathFromIDList (pidl)

    file_to_process = my_path.decode()

    ''' continue processing file_to_process
    '''

【问题讨论】:

我想知道为什么这被否决了......(34个月后) 同意! documentation 非常不直观,provided example 没有显示如何执行此操作,并且没有其他明显的 Google 搜索结果。你有我的 +1。 @Alex thx ... Jeff 的回答真的很有帮助 ... 【参考方案1】:

您需要获取所需文件夹的 PIDL。

myfolder_pidl = shell.SHParseDisplayName(u"C:\test", 0)[0]

然后将其传递给SHBrowseForFolder

【讨论】:

以上是关于选择任意文件夹作为浏览的起始文件夹(win32gui、win32com、SHGetFolderLocation)的主要内容,如果未能解决你的问题,请参考以下文章

仅使用所需的库构建可执行文件?

xshell安装安装不了win7系统

如何设置win10锁屏壁纸

如何设置win10锁屏壁纸

浅谈DFS

C++/Win32 - 如何迭代特定进程的线程列表并将起始地址解析为模块?