ShellExecuteEx 引导路径

2024-02-03

我有一条形式的路径

::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\Fonts

如果我将其输入到资源管理器地址栏中,它会正确打开控制面板 - 字体。

如何使用 ShellExecuteEx 或类似的东西(包含 guid 的路径)执行相同的操作?


要打开此类 GUID 路径,您必须在前面添加shell:路径协议:

shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\Fonts

请注意,GUID 路径通常Windows 版本之间的更改,例如上述路径在我的 Windows 10 计算机上不起作用。

更好的方法是使用已知文件夹API https://msdn.microsoft.com/en-us/library/windows/desktop/bb776911(v=vs.85).aspx获取指向该文件夹的 PIDL 并使用以下命令打开该 PIDLShellExecuteEx:

#include <iostream>
#include <windows.h>
#include <shellapi.h>
#include <atlbase.h>  // CComHeapPtr

struct CComInit
{
    HRESULT hr = E_FAIL;
    CComInit() { hr = ::CoInitialize(nullptr); }
    ~CComInit() { if( SUCCEEDED(hr) ) ::CoUninitialize(); }
};

int main() 
{
    CComInit com;
    if( FAILED( com.hr ) )
    {
        std::cout << "Failed to initialize COM, error: 0x" << std::hex << com.hr << '\n';
        return static_cast<int>( com.hr );
    }

    CComHeapPtr<ITEMIDLIST> pidl;
    HRESULT hr = ::SHGetKnownFolderIDList( FOLDERID_Fonts, KF_FLAG_DEFAULT, nullptr, &pidl );
    if( FAILED( hr ) )
    {
        std::cout << "SHGetKnownFolderIDList failed with error 0x" << std::hex << hr << '\n';
        return static_cast<int>( hr );
    }

    SHELLEXECUTEINFOW si{ sizeof(si) };
    si.fMask = SEE_MASK_NOASYNC | SEE_MASK_IDLIST;
    si.nShow = SW_SHOWDEFAULT;
    si.lpVerb = L"open";
    si.lpIDList = pidl;

    if( !::ShellExecuteExW( &si ) )
    {
        DWORD err = ::GetLastError();
        std::cout << "ShellExecuteExW failed with error " << err << '\n';
        return static_cast<int>( err );
    }

    return 0;
}

Notes:

  • ATL类CComHeapPtr是一个智能指针,会自动调用CoTaskMemFree()在其析构函数中正确地释放由 shell 分配的 PIDL。如果你不想使用它,你必须打电话CoTaskMemFree()手动或使用您自己的 RAII 包装器来执行此操作。
  • 旗帜SEE_MASK_NOASYNC使用该示例是因为该示例是一个控制台程序,该程序将在执行后立即退出ShellExecuteEx call.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ShellExecuteEx 引导路径 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 使用 C# 读取 Soap 消息

  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 如何从.Net Core 3创建Windows服务[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近我需要将 Net Core 3 0控制台应用程序转换为Windows服务 由于我不需要将此流程移植
  • Gif 帧持续时间似乎比预期慢

    我正在使用枕头图像库创建 GIF 我遇到了一个问题 我试图以尽可能最小的帧持续时间使某些帧闪烁得非常快 但是当我将帧的持续时间设置为 1 可能的最低持续时间 GIF 的持续时间为 100 实际上它的持续时间似乎比预期的要长 我用一个简单的方
  • 如何使一个 跨越两列表中的两列?

    如何使用 HTML 和 CSS 创建像上面示例一样的表格 我尝试过以下方法 table tr td style width 50 TEXT td td style width 50 TEXT td tr tr td style width
  • 以编程方式创建 UITableView

    我在 Xcode 4 6 中有一个使用故事板的应用程序 我将 UITableView 添加到视图控制器类中 它按预期工作 然而 当我尝试删除故事板中的 UITableView 并以编程方式将其添加回同一个类时 我遇到了两个具体问题 1 虽然
  • 具有自定义身份验证的 ASP.NET Web API

    我正在寻求帮助创建具有自定义用户名 密码身份验证的 Web API 我有自己的数据库来验证用户 我不想使用 Windows 身份验证 我希望能够用类似的属性来装饰我的 Web api 调用 Authorize 这样在未登录的情况下进行的调用
  • VSCode:无法导入 Golang 包

    我正在 GoPath 中编写一个 Go 项目 并使用 Redigo 包连接到 Redis 服务器 应用程序运行良好 但是在 VSCode 中 包导入时出现这个烦人的错误 这导致 VSCode 无法提供智能感知建议 无法导入 github c
  • 具有 facebook 身份验证和唯一 ID 的 Firebase 规则

    我正在寻找一些建议或可能的解决方案来加强我的火力规则 这是我在 Firebase 中的用户树 users male uid female uid UID 将是创建帐户时的纪元时间戳 它是一个有符号整数 这些是 firebase 规则 基本上
  • 为什么我不能在此查询中使用WITH(通用表表达式)?

    这只是一个 SSCCE CREATE TABLE test i INTEGER NOT NULL WITH max i AS SELECT MAX i FROM test SELECT FROM test WHERE max i i lt
  • jQuery 的 :first 和 :last 在元素的第一个子元素上

    我有一些简单的表 多个 全部带有 class parent 其中有多个 tr 行 这 td 这些行中的单元格有自己的表格 我正在尝试瞄准 tr 的行first 父 表 如下所示 HTML table class parent tr lt m
  • pip3读取超时错误

    sudo pip3 install scikit learn 任何模块实际上只是使用最近的尝试 sudo pip3 install U scikit learn sudo H pip3 install U scikit learn sudo
  • 我应该在 Android 应用程序中将全局方法和变量放在哪里?

    当我编写方法或使用成员变量时 我经常发现需要在应用程序中共享它们 但他们应该去哪里呢 我可以对 Activity 进行子类化 但是一旦我使用 MapView 并被迫使用 MapActivity 这种情况就会失败 因此并非所有活动都继承自我的
  • 如何找到 virtualenv python 的路径

    如何找到使用本教程构建的 virtualenv python 的路径 我想在这个环境中找到python并在我的eclipse中使用它 sudo pip install virtualenv virtualenvwrapper export
  • C中声明语句和赋值语句的区别? [复制]

    这个问题在这里已经有答案了 我是编程新手 正在尝试学习 C 我正在读一本书 我在其中读到了这些语句 但无法理解它们的含义 宣言 int a 任务 a 3 声明和赋值在一个语句中 int a 3 声明说 我将使用一个名为 的变量a 存储一个整
  • 我在pandas DataFrame中有字符串索引,如何通过startswith进行选择?

    在数据框中 我有一个来自国家列的索引 但我做不到 df df Nation str startswith U 无需重置索引 如何获取索引的 str 对象 Use index与str nice df df index str startswi
  • JSEncrypt(js)加密,但python无法解密

    我正在尝试使用 JSEncrypt javascript 进行 RSA 加密文本 并使用 python crypto python3 7 进行解密 大多数时候 它是有效的 但有时 python无法解密 const encrypt new J
  • 将 AssemblyInfo.cs 中的程序集版本放入 Web.config 中

    我有这样的场景 其中我有来自 AssemblyInfo cs 的项目的程序集版本 例如 2 0 0 如下所示 assembly AssemblyVersion 2 0 0 此外 我想检索此 AssemblyVersion 并将其动态设置为
  • 使用鼠标拖动边缘来调整 Thumb 控件的大小

    我需要一个可以使用鼠标调整大小的拇指控件 当用户将鼠标悬停在其中一端时 应显示一个大小光标 当用户单击并拖动控件的一端时 它将重新调整大小 如何才能做到这一点 这是我不久前制作的一个 它允许Move and Resize 但您可以删除Mov
  • android数据绑定中的“DataBindingComponent”类是什么?

    我在官方API文档中看到了DataBindingComponent https developer android com reference android databinding DataBindingUtil html https d
  • 从 Outlook 发送到 Gmail 时,HTML 电子邮件中会添加额外的空间

    如果我在 Gmail 或 Outlook 中打开以下 HTML 电子邮件 它会按预期呈现 img src img png 但是 如果我在 Outlook 中打开它 然后将其转发到 Gmail 它会添加额外的垃圾 HT ML 使该区域比应有的
  • ShellExecuteEx 引导路径

    我有一条形式的路径 26EE0668 A00A 44D7 9371 BEB064C98683 0 Fonts 如果我将其输入到资源管理器地址栏中 它会正确打开控制面板 字体 如何使用 ShellExecuteEx 或类似的东西 包含 gui