天道酬勤,学无止境

How do I programmatically open the "Libraries" folder in Windows Explorer in Windows 7?

Note, the user may have redefined the default window for windows explorer, so simply opening "" using Process.Start or IShellDispatch.Open is not going to be acceptable.

I figured this would be trivial, but I've lost a day trying to find an example. Note, the Libraries folder is a known folder with a folder id of FOLDERID_Libraries. Opening up using the associated GUID for FOLDERID_Libraries using

  Process.Start("explorer.exe", "::{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}")

opened "My Documents" instead.

While VB.NET or C# would be preferred, I can engineer a solution from almost any language.

Many thank,

Tom

评论

Have you tried simply using Windows-Run shell:Libraries Just tried this in a command prompt too. explorer shell:libraries opened what I expectedI don't kn

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • How do I programmatically add a folder to the user's Favorites (in Windows Explorer)?
    I am looking for a way to programmatically add a folder to the Favorites in Windows Explorer. Its Windows Explorer specific and based around this project: http://www.codeproject.com/Tips/132804/Open-folders-using-a-Run-Command So far I've tried Process Monitor and searching the registry, but I can't seem to find my Windows Explorer Favourites in regedit. Microsoft has changed this in Windows 8 so I have tagged my question accordingly. Please see the comments in the marked answer for Win8 & etc details.
  • Programmatically selecting file in explorer
    In my application I can programmatically open explorer and select a file using the following code: void BrowseToFile(LPCTSTR filename) { CString strArgs; strArgs = _T("/select,\""); strArgs += filename; strArgs += _T("\""); ShellExecute(0, _T("open"), _T("explorer.exe"), strArgs, 0, SW_NORMAL); } My problem is that if I call this function a second time with a different file, but in the same folder, the selection in explorer does not change to the new file, but remains on the previous file. For example, if I call my function with C:\path\to\file1.txt, a new explorer window will open and file1
  • 在资源管理器中以编程方式选择文件(Programmatically selecting file in explorer)
    问题 在我的应用程序中,我可以使用以下代码以编程方式打开资源管理器并选择一个文件: void BrowseToFile(LPCTSTR filename) { CString strArgs; strArgs = _T("/select,\""); strArgs += filename; strArgs += _T("\""); ShellExecute(0, _T("open"), _T("explorer.exe"), strArgs, 0, SW_NORMAL); } 我的问题是,如果我再次使用另一个文件但在同一文件夹中调用此函数,则资源管理器中的选择不会更改为新文件,而是保留在前一个文件中。 例如,如果我使用C:\path\to\file1.txt调用函数,则将打开一个新的资源管理器窗口,并选择file1.txt 。 如果我再次使用C:\path\to\file2.txt调用函数,则现有的资源管理器窗口将被激活,但是选择仍将在file1.txt 。 有没有一种方法可以强制资源管理器更新选择,或者有更好的方法来完成此操作? 编辑: 上面提到的行为是在Windows XP上。 看来Vista / Win7上的行为有所不同。 每次调用都会打开一个新的资源管理器实例并选择文件。 我的主要目标是将Visual Studio选项复制到文档的“打开包含文件夹”。 Visual
  • 如何在选择特定文件的情况下打开资源管理器?(How to open Explorer with a specific file selected?)
    问题 我想编写一个函数,您可以将文件路径传递给该函数,例如: C:\FOLDER\SUBFOLDER\FILE.TXT 它将使用包含文件的文件夹打开Windows资源管理器,然后在文件夹中选择该文件。 (类似于许多程序中使用的“在文件夹中显示”概念。) 我怎样才能做到这一点? 回答1 不使用Win32 Shell函数的最简单方法是简单地使用/select参数启动explorer.exe。 例如,启动流程 explorer.exe /select,"C:\Folder\subfolder\file.txt" 将打开一个新的资源管理器窗口,其中已选择file.txt到C:\ Folder \ subfolder。 如果您希望以编程方式执行此操作而不启动新进程,则需要使用shell函数SHOpenFolderAndSelectItems,这是explorer.exe的/select命令在内部使用的功能。 请注意,这需要使用PIDL,如果您不熟悉Shell API的工作方式,那么它可能是真正的PITA。 这是/select方法的完整程序化实现,由于@Bhushan和@tehDorf的建议,可以进行路径清理: public bool ExploreFile(string filePath) { if (!System.IO.File.Exists(filePath)) { return
  • 如何使用Portable Python安装外部库?(How to install external libraries with Portable Python?)
    问题 由于管理员权限,我无法在计算机上安装Python,但我确实成功下载/打开了Portable Python。 我在Windows 7 64位计算机上。 我如何才能使用以前的外部库,例如Numpy或Gmpy? 回答1 easy_install尝试从源代码安装。 gmpy和gmpy2是C扩展,需要存在兼容的C编译器和其他库(GMP;以及gmpy2的MPFR和MPC)。 在Windows上,从源代码安装通常很困难。 安装程序包括扩展的预编译版本。 一种选择是从安装程序中提取已编译的二进制文件。 7-Zip是可以打开安装程序文件,您可以提取二进制文件。 在标准的Python安装中,只需将提取的二进制文件放在site-packages目录中。 如有必要,您可以在另一个系统上进行提取并复制文件。 您也可以使用zipfile模块提取编译后的扩展名。 这是一个例子。 您将需要修改确切的文件位置以反映您的系统。 >>> import zipfile >>> f=zipfile.ZipFile('gmpy2-2.0.0.win-amd64-py3.3.exe','r') >>> f.namelist() ['PLATLIB/gmpy2-2.0.0-py3.3.egg-info', 'PLATLIB/gmpy2.pyd'] >>> f.extract('PLATLIB/gmpy2.pyd') 'C
  • 如何以编程方式禁用 Windows 8 Charms 栏?(How to disable the Windows 8 Charms bar programmatically?)
    问题 我需要创建一个应用程序,该应用程序将在 Windows 8 上全屏运行并且用户不应该能够轻松退出。 由于该应用程序将在仅具有触觉输入的计算机或平板电脑上运行,因此我将创建一个无边框且最顶层的 WPF 应用程序,只有在连接键盘时才能关闭该应用程序。 问题是左侧的应用程序切换栏和右侧的魅力栏仍然可以在没有键盘的情况下打开,并允许用户退出应用程序。 这可以从代码中禁用吗? 我似乎找不到办法。 简单的解决方案是在另一个操作系统上运行,但机器将运行 Windows 8,对此我无能为力。 回答1 我挖了一个 .TXT 和我前段时间在网上找到的一些笔记,它可能会有所帮助(最坏的情况,它不适用于 Windows 8 并且不起作用。不幸的是我无法引用它的来源,我真的不记得它来自哪里): 自 XP 以来,“信息亭模式”已经存在。 通常它的目的是锁定 IE 以显示一些交互式网页,同时不让用户关闭它:它被称为强制用户配置文件。 要设置它: 按照您想要的方式设置帐户。 设置组策略,设置启动程序 用户必须是标准用户,而不是管理员。 但是话又说回来,如果未经授权的人即使计算机“冻结”也可以获得管理员权限,我认为您遇到了更严重的问题。 以管理员身份登录并选择“计算机属性”>“高级”>“用户配置文件设置”>(选择该配置文件)>(将其复制到任何位置)> 将“允许使用”设置为“所有人” 转到该文件夹​​的属性
  • 如何从Windows资源管理器启动PowerShell?(How do I start PowerShell from Windows Explorer?)
    问题 是否可以通过Windows资源管理器在特定文件夹中启动PowerShell,例如右键单击文件夹并具有“在此文件夹中打开PowerShell”之类的选项? 每天第一次运行MSBuild时,必须将目录更改为我的项目文件夹确实很烦人。 回答1 在Windows资源管理器中,只需转到顶部的地址栏(键盘快捷键: Alt + D或Ctrl + L ),然后输入powershell或powershell_ise并按Enter即可。 将打开一个PowerShell命令窗口,其中包含当前目录。 回答2 只需添加一个反向技巧即可,在PowerShell提示符下,您可以执行以下操作: ii . 或者 start . 在当前目录中打开Windows资源管理器窗口。 回答3 如果您使用的是Windows 8或更高版本,则只需使用内置文件→“打开Windows PowerShell”。 或Alt + F后跟R。 回答4 作为上述答案的替代方法,它要求您每次键入PowerShell命令( powershell.exe ),您可以像使用“在此处打开命令窗口”上下文菜单一样创建上下文菜单项。 这些命令放在三个注册表项中。 每个键控制另一个Windows资源管理器对象的上下文菜单。 第一个是您询问的: HKCR \ Directory \ Background \ shell-这是资源管理器窗口本身的上下文菜单
  • 如何从VBA在Windows资源管理器中打开文件夹?(How to open a folder in Windows Explorer from VBA?)
    问题 我想单击访问表单上的一个按钮,该按钮在Windows资源管理器中打开一个文件夹。 在VBA中有什么方法可以做到这一点吗? 回答1 您可以使用以下代码从vba打开文件位置。 Dim Foldername As String Foldername = "\\server\Instructions\" Shell "C:\WINDOWS\explorer.exe """ & Foldername & "", vbNormalFocus 您可以将此代码用于Windows共享和本地驱动器。 如果要最大化视图,可以将VbNormalFocus替换为VbMaximizedFocus。 回答2 最简单的方法是 Application.FollowHyperlink [path] 只需要一行! 回答3 多亏了PhilHibbs的评论(关于VBwhatnow的回答),我终于找到了一个既可以重用现有窗口又可以避免向用户刷新CMD窗口的解决方案: Dim path As String path = CurrentProject.path & "\" Shell "cmd /C start """" /max """ & path & """", vbHide 其中“路径”是您要打开的文件夹。 (在此示例中,我打开了保存当前工作簿的文件夹。) 优点: 避免打开新的资源管理器实例(仅在存在窗口时设置焦点
  • How to programmatically minimize opened window folders
    How can I get the list of opened of folders, enumerate through it and minimize each folder programmatically? At times some opened folders do steal focus from the tool when jumping from one form in the application to another. Preventing this is of high priority for our client. The customers are visually impaired people, so they access the machine only via screen readers. Minimizing other windows (folders) is not at all a problem, in fact a requirement. I tried this: foreach (Process p in Process.GetProcessesByName("explorer")) { p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; } As
  • 如何使用 Powershell 从任务栏中取消固定“Library”文件夹?(How to unpin “Library” folder from Task Bar using Powershell?)
    问题 我正在修改 Chocolatey 脚本以包含Uninstall-ChocolateyPinnedTaskBarItem功能。 这适用于以下命令 # WORKS Uninstall-ChocolateyPinnedTaskBarItem "$env:ProgramFiles\Internet Explorer\iexplore.exe" 但它不适用于 # DOESN'T WORK Uninstall-ChocolateyPinnedTaskBarItem "$env:SystemRoot\explorer.exe" 如何仅使用 Powershell 摆脱默认固定的“库”文件夹? 这是卸载脚本。 function Uninstall-ChocolateyPinnedTaskBarItem { <# .SYNOPSIS Removes an item from the task bar linking to the provided path. .PARAMETER TargetFilePath The path to the application that should be launched when clicking on the task bar icon. .EXAMPLE Uninstall-ChocolateyPinnedTaskBarItem "${env
  • 如何以编程方式更改映射驱动器的标签?(How do I programmatically change the label of a mapped drive?)
    问题 我正在编写一个使用 WNetAddConnection2 API 映射网络驱动器的软件。 以防万一,这是一个 WebDAV 驱动器,而不是普通的 SMB 共享。 驱动器采用我想更改的默认名称。 网上的一些答案推荐使用 System.IO.DriveType,例如: DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (var drive in allDrives) { if (drive.DriveType == DriveType.Network && drive.Name.StartsWith("Z:")) { drive.VolumeLabel = "DriveInfo"; } } 这显然不适用于网络驱动器,并且由 MSDN 支持,其中声明将抛出UnauthorizedAccessException异常。 其次,我尝试使用shell方法: Shell32.Shell shell = new Shell32.Shell(); ((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell"; 代码执行没有错误,但驱动器没有重命名。 这就是奇怪的地方,我找到了写入这些内容的注册表路径: HKEY_CURRENT_USER\ Software\
  • 是否可以在Windows中使用CreateFile以编程方式从iPhone读取图像?(Can images be read from an iPhone programmatically using CreateFile in Windows?)
    问题 将iPhone连接到Win7计算机时,可以使用资源管理器(和我的应用程序的打开文件对话框)查看图像。 但是,文件位置不包含驱动器号。 例如Computer\Apple iPhone\Internal Storage\DCIM\800AAAAA\IMG_0008.JPG而不是E:\DCIM\800AAAAA\IMG_0008.JPG ,这在sdcard,USB驱动器等中很常见。 我尝试使用CreateFileW从iPhone读取图像,但失败,并显示“(错误代码:3)系统找不到指定的路径。” 我也尝试过使用Chrome访问它们,但是它也失败了。 有什么建议么? 回答1 该文件夹实际上是所谓的“虚拟文件夹”,在文件系统上没有完整路径。 您将需要使用从打开对话框返回的外壳项目来获取文件的内容,而不是使用CreateFile。 数据应该可以访问,但是您应该遵循MSDN文档中的说明。 我确定可能有更好的示例(因为这仅提供了指导)。 编辑的粗略过程是从IFileOpenDialog获取IShellItem,然后绑定到流,然后读取流(假定为只读)-请记住,这段代码几乎没有错误处理,检查或安全性: if (pitem->GetDisplayName(SIGDN_NORMALDISPLAY, &destName) == S_OK) { std::cout << destName << std
  • NuGet and Portable Class Libraries - Package doesn't target any framework
    I have been using NuGet to manage my internally created assemblies for a few months, and it's working very well. I recently 'discovered' portable class libraries, which has also been great - until it's time to install the packages. Say I have a PCL that targets .NET 4.5, SL5 and .NET for Windows Store Apps. I run nuget spec to create the .nuspec file, edit the values, package it up, and add the .nupkg to our internal feed. If I open the .nupkg file in the Package Explorer, I see one content folder under lib called portable-win+net45+sl50. When I try to install the package from any compatible
  • 如何读取/写入Windows 7库位置?(How to Read/Write Windows 7 Library Locations?)
    问题 介绍 在Windows 7中,您有一些用于存放文档,图片和音乐等的特殊文件夹,称为“库”。 如果您不知道它们,则基本上每个“库”文件夹都可以包含“位置”(路径),这些位置基本上是每个“库”的快捷方式。 一些例子: Documents (Library) E:\ Personal \ Documents (Location) F:\ Backups \ Documents (Location) Music (Library) E:\ Media \ Music \ Albums (Location) E:\ Media \ Music \ Singles (Location) Pictures (Library) E:\ Media \ Photos (Location) 当您从Windows资源管理器或“开始”菜单中单击这些库文件夹中的任何一个时,Windows资源管理器将显示该库中定义的位置。 任务 我需要做的是读取每种库类型的位置,并能够用我自己的位置写回(更新)库。 我发现这些库存储在用户AppData文件夹中,如下所示: C:\Users\SOMEUSER\AppData\Roaming\Microsoft\Windows\Libraries 这些库是这种文件类型:库(.library-ms) -如果右键单击一个库并选择属性,则“库”选项卡上可以看到与该库关联的库位置
  • NuGet 和可移植类库 - 包不针对任何框架(NuGet and Portable Class Libraries - Package doesn't target any framework)
    问题 几个月来,我一直在使用 NuGet 来管理我内部创建的程序集,并且运行良好。 我最近“发现”了可移植的类库,它也很棒——直到安装包的时候。 假设我有一个针对 Windows 应用商店应用程序的 .NET 4.5、SL5 和 .NET 的 PCL。 我运行nuget spec来创建 .nuspec 文件,编辑值,将其打包,然后将 .nupkg 添加到我们的内部提要中。 如果我在包资源管理器中打开 .nupkg 文件,我会在 lib 下看到一个内容文件夹,名为portable-win+net45+sl50。 当我尝试从另一个解决方案中的任何兼容项目安装包时,我收到以下消息: “无法安装‘Project.PCL’,因为它与解决方案中的任何项目都不兼容。该包不针对任何框架。” 如果我在包资源管理器中手动创建 .nupkg,更新版本号,为每个目标框架添加一个 lib 文件夹(不是可移植文件夹)并将 Project.PCL.dll 添加到每个文件夹,我可以将包添加到解决方案中的兼容项目。 但是每次我想更新 PCl 时都执行此过程有点乏味(我一直在项目根文件夹中创建一个小 .cmd 文件以快速打包和部署)。 其他人有这个问题吗? 如何以与其他类型项目相同的方式打包 PCL? 注意 - 我使用的是 VS 2012 Ultimate 和 NuGet 2.2 回答1 听起来nuget
  • 特定用户的SHGetFolderPath()(SHGetFolderPath() for a specific user)
    问题 我正在寻找一种获取特定用户的本地应用程序数据文件夹的好方法-无需输入该用户的登录详细信息。 SHGetFolderPath()可以为我要为其获取本地appdata文件夹的任何用户接受访问令牌,但是要获取访问令牌,必须提供用户密码。 另外,根据文档,<= Windows 2000不支持此功能。 注册表项包含AppData值,该值包含当前用户的本地appdata文件夹的位置...因此,我可以从技术上为特定用户安装HKCU配置单元并访问此值; 但是,Microsoft似乎强烈不鼓励使用此密钥,而且我听说它有时也可能不准确。 具有讽刺意味的是,在Windows上,如果管理员帐户只是打开资源管理器并浏览到正确的位置,则可以轻松访问和修改任何用户的appdata文件夹中的所有数据。以编程方式获取特定用户的appdata文件夹的位置。 那我还有其他选择吗? 目前,访问注册表(gasp)似乎是最好的选择,但我想使用一些正式的东西,如果可能的话,Microsoft最好不要这样做。 任何建议,将不胜感激。 回答1 没有令牌AFAIK,没有记录的方法可以做到这一点,但是最好的选择是: 查找配置文件:HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList(在Win9x上为%windir%\ Profiles)
  • 用批处理文件关闭文件夹的窗口(Close folder's window with batch file)
    问题 我的桌面上有一个名为test的文件夹。 我想创建一个批处理文件,以便在使用Windows资源管理器打开此文件夹时自动关闭窗口。 我尝试了下一个命令,但是执行时什么也没有发生 TASKKILL /F /FI "WINDOWTITLE eq test" /IM explorer.exe 显示的消息是 No tasks running with the specified criteria. 有什么帮助吗? 回答1 如果在Windows注册表中,则无法使用命令taskkill关闭文件夹的Windows资源管理器窗口 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 双字SeparateProcess的值分别为0。未选中“文件夹选项”的“视图”选项卡上的“在单独的进程中启动文件夹窗口”选项。 而且据foxidrive发现(请阅读下面的评论),我也可以确认,即使在Windows重新启动后,在Windows XP SP3上启用此设置也不会影响打开文件夹中运行的explorer.exe数量。 因此,它取决于Windows的版本(2000,XP,Vista,7、8、8.1)和“文件夹选项” 在标题栏中显示完整路径在单独的过程中启动文件夹窗口
  • 使用文件识别过程(Identify process using a file)
    问题 我一直在尝试找出如何以编程方式识别对特定文件有锁定的过程。 我已经搜索了Win32 API和WMI,但到目前为止我什么都找不到。 我知道这是可能的-Sysinternals能够列出系统上每个进程访问/锁定的每个资源。 谁能给我一个提示? 回答1 您可以使用Sysinternals中的handle.exe。 就像是: > handle /accepteula C:\path\to\directory ... program.exe pid: 1234 type: File 2E4: C:\path\to\directory ... 感谢https://stackoverflow.com/a/599268/367916。 回答2 您可以使用Microsoft的Process Explorer 下载并解压并运行Process Explorer 单击查找菜单,然后单击查找句柄或DLL ...或按CTRL + F 复制路径并将其粘贴到文件的锁定文件夹中单击搜索,您可以从“进程资源管理器”主窗口中终止进程 回答3 如果您可以限制自己使用足够新的Windows版本,则重新启动管理器可以告诉您哪个进程打开了特定文件。 回答4 由于Process Explorer的工作方式,我怀疑您需要寻找的是一种查找附加到给定进程的文件句柄的方法,并且您必须为系统中的每个进程提取该列表并寻找您的文件在其中。
  • 如何获取打开的资源管理器窗口的PIDL?(How to get the PIDL of an open explorer window?)
    问题 我知道如何使用Microsoft Internet Controls COM库获取所有打开的资源管理器窗口。 由此,我可以找到那些窗口的LocationURL。 但是,这仅是为文件系统上的路径设置的。 似乎在显示虚拟对象(例如网络打印机或回收站)时, LocationURL为空。 LocationName似乎仍设置为在开始栏中可见的名称。 设置LocationURL ,这足以使我了解浏览器窗口所指向的位置,但是我如何才能找到这些特殊文件夹所指向的内容呢? 在指向项目标识符列表(PIDL)的指针上读取一点。 知道在浏览器窗口中显示的是哪个PIDL可以识别出来。 有什么办法找回这个吗? 回答1 这是一个示例C#控制台应用程序代码,该代码获取当前Windows资源管理器窗口的PIDL: class Program { static void Main(string[] args) { var shellWindows = new ShellWindows(); foreach (IWebBrowser2 win in shellWindows) { IServiceProvider sp = win as IServiceProvider; object sb; sp.QueryService(SID_STopLevelBrowser, typeof(IShellBrowser)
  • 如何以编程方式使用 Windows 文件资源管理器执行搜索?(How can I programmatically use Windows File Explorer to perform a Search?)
    问题 我们的网络上有一个文件夹,我们想从我们的程序中搜索它,包括子文件夹。 我们想要返回名称包含“String1”或“String2”或“StringN”的文件列表。 我们更愿意以编程方式打开资源管理器窗口并使用本机 Windows 文件资源管理器查看与搜索结果匹配的所有文件。 这可能吗? 如何? 谢谢! 回答1 您可以使用 .ms-search 文件格式来表示已保存的搜索。 如果您打开此文件格式,它将启动一个应用了搜索条件的文件资源管理器。 如果您已经打开了一个应用了搜索的文件资源管理器窗口,您可以使用功能区上的“保存搜索”按钮进行保存。 回答2 由于 Windows 资源管理器随操作系统的每个版本而变化......我建议通过 .NET 进行搜索并在表单的网格上显示结果。 使用 System.IO 命名空间。 System.IO.Directory.GetFiles(folderName) 将获取文件... 您将需要一个递归函数来首先枚举所有文件,然后递归每个子目录。 回答3 下面是一些代码,用于创建保存的搜索 xml 文件 (file.search-ms),用于按名称搜索具有指定路径和搜索字符串: /// <summary> /// Generates the XDocument needed to create a .search-ms file for the path