创建新文件夹的“Shell 命名空间”方式是什么?

2024-07-01

显然,这对于 win32 api - CreateDirectory() 来说是微不足道的。但我正在尝试托管一个 IShellView,并且希望以最面向 shell 的方式来做到这一点。我本以为 IShellFolder 中会有一个 createobject 或 createfolder 或类似的东西。但 IShellView 和 IShellFolder 甚至 IFolderView 似乎都没有类似的东西。

有没有一种 shell 编程方式来创建新文件夹?或者我是否需要使用路径名(老式的方式)创建一个文件夹?

如果我必须通过 CreateDirectory() 来完成此操作,那么我的下一个问题可能是:关于如何让 IShellView / IFolderView 实际看到这个新对象并将其显示给用户的任何想法?

动机:创建我自己的文件对话框替代品,我想提供标准 XP 样式文件对话框的“新文件夹”工具栏图标功能。

编辑:我继续使用 CreateDirectory 创建了一些基本上可以工作的东西。但是,我仍然希望有更好的方法来做到这一点,但这样您就可以看到它是如何工作的,并提供更好的想法来更好地解决这个问题:

    PidlUtils::Pidl pidl(m_folder);
    CFilename folderName(GetDisplayNameOf(pidl), "New Folder");
    for (int i = 2; folderName.Exists(); ++i)
        folderName.SetFullName(FString("New Folder (%d)", i));
    if (!CPathname::Create(folderName, false))
        throw CContextException("Unable to create a new folder here: ");

    // get the PIDL for the newly created folder
    PidlUtils::Pidl pidlNew;
#ifdef UNICODE
    const wchar_t * wszName = folderName.c_str();
#else
    wchar_t wszName[MAX_PATH];
    MultiByteToWideChar(CP_ACP, 0, folderName.GetFullName(), -1, wszName, MAX_PATH);
#endif
    m_hresult = m_folder->ParseDisplayName(NULL, NULL, wszName, NULL, pidlNew, NULL);
    if (FAILED(m_hresult))
        throw CLabeledException(FString("Unable to get the PIDL for the new folder: 0x%X", m_hresult));

    // upgrade our interface so we can select & rename it
    CComQIPtr<IShellView2> sv2(m_shell_view);
    if (!sv2)
        throw CLabeledException("Unable to obtain the IShellView2 we need to rename the newly created folder.");

    // force it to see thew new folder
    sv2->Refresh();

    // select the new folder, and begin the rename process
    m_hresult = sv2->SelectAndPositionItem(pidlNew, SVSI_EDIT|SVSI_DESELECTOTHERS|SVSI_ENSUREVISIBLE|SVSI_POSITIONITEM, NULL);
    if (FAILED(m_hresult))
        throw CLabeledException(FString("Unable to select and position the new folder item: 0x%X", m_hresult));

是的你可以获取 IContextMenu http://support.microsoft.com/kb/327569并寻找子菜单,但何苦呢,只需致电SH变更通知 http://msdn.microsoft.com/en-us/library/bb762118(VS.85).aspx调用 CreateDirectory 后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建新文件夹的“Shell 命名空间”方式是什么? 的相关文章

  • 如何将流写入内存流?

    public void doprocess TcpClient client MemoryStream ms new MemoryStream Stream clStream client GetStream byte buffer 1 n
  • C++11 中的延迟初始化顺序

    考虑以下代码 分为三个编译单元 a h struct A void Register const char s const char m s 10 int m i 0 A GetA a cpp include a h include
  • 规避模板专业化

    假设我是某个模板库的用户 CTL 它定义了一个模板 命名为 Hector template
  • UWP 导航 (Template10)、枢轴控制、多帧

    我正在尝试在我的 UWP 应用程序中实现以下导航样式 使用 Template10 但正在努力如何使用多个帧作为独立的历史堆栈 在枢轴的每个框架内 我希望有一个独立的框架 它有自己的历史记录和后堆栈 只能通过枢轴在框架之间导航 我正在考虑使用
  • “constexpr”有什么用?

    我实在是找不到它有什么用处 我的第一个想法是我可以用它来实现 按合同设计 而不使用如下宏 struct S S constexpr int i S i static assert i lt 9 i must be lt 9 S int i
  • 我应该如何继承IDisposable?

    为了保护无辜者 班级名称已更改 如果我有一个名为 ISomeInterface 的接口 我还有继承该接口的类 FirstClass 和 SecondClass FirstClass 使用必须处置的资源 二等舱没有 那么问题来了 我应该从哪里
  • elmah定制提供商及暴露事件

    我想知道如何创建自定义提供程序来存储错误日志 例如 Windows 事件查看器的提供者 如果到目前为止不可能 我还想知道是否有任何可以覆盖的公开事件 以便我可以注入我的代码 获取异常 做任何我想做的事情 我知道 Global asax 中有
  • 将 wav 文件存储在数组中

    我需要一种快速方法来将 wav 文件的所有样本存储在数组中 我目前正在通过播放音乐并存储来自示例提供程序的值来解决这个问题 但这不是很优雅 从 NAudio 演示中 我有带有此方法的 Audioplayer 类 private ISampl
  • Asp.net MVC 2 缓存

    我目前正在使用 c 中的 asp net mvc 2 开发一个网站 我从未使用过 MVC 中的缓存功能 并且想将其应用到用户个人资料页面 此页面上的内容很少更改 唯一需要实时的部分是用户最近发布的帖子列表 我使用linq to sql从数据
  • 如何在类型依赖于派生类的基模板类中声明成员?

    给定一个使用 CRTP 的基类 我正在考虑在基模板类中声明一个成员 其中类型依赖于派生类 虽然以下内容按预期工作 template
  • 在 OpenGL 中绘制 2D 纹理 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个绘图函数叫做DrawImage但这确实令人困惑 并且仅适用于特定形式的重塑函数 所以我有两个问题 如何在 Ope
  • 在 C++ 中调用函数有多少开销?

    许多文献都谈到使用内联函数来 避免函数调用的开销 但我还没有看到可量化的数据 函数调用的实际开销是多少 即通过内联函数我们可以实现什么样的性能提升 在大多数架构上 成本包括将所有 或部分 或没有 寄存器保存到堆栈 将函数参数推送到堆栈 或将
  • 如何在预处理器中检测X32 ABI或环境?

    X32是一个 ABIamd64 x86 64使用 32 位指针的 CPU 这个想法是将 x86 64 的较大寄存器集与 32 位指针产生的较小内存和缓存占用空间结合起来 它可提供高达约 40 的加速 看x86 x32 和 x64 架构之间的
  • Sharepoint 客户端 GetFolderByServerRelativeUrl 文件夹修改日期

    我试图在使用 GetFolderByServerRelativeUrl 函数时检索文件夹的 修改日期 和 创建日期 我该怎么做 我只能从中获取relativeUrl 和文件夹名称 下面是我为检索文件夹所做的操作 请帮忙 FolderColl
  • “auto_ptr”和 STL 容器:编写错误用法的示例

    读完本教程后提出这个问题 http www cprogramming com tutorial auto ptr html http www cprogramming com tutorial auto ptr html 在那里你可以找到以
  • C:分段错误:GDB:<读取变量时出错>

    我有一个函数shortestPath 它是Dijkstra算法的修改实现 用于我正在为comp2类开发的棋盘游戏AI 我浏览了网站并使用 gdb 和 valgrind 我确切地知道段错误发生的位置 实际上几个小时前就知道了 但无法弄清楚是什
  • 如何在调试 C 程序时将 gdb 值转换为 python 数字对象

    我在调试 C 程序时使用 python2 6 的 gdb 模块 并希望根据实例的 Type 将 gdb Value 实例转换为 python 数字对象 变量 例如 把我的C程序SomeStruct gt some float val 1 6
  • 在heroku上运行c++程序

    我正在尝试在 Heroku 上运行 C 程序 我读过这篇文章 但是我没能成功 因为服务器上没有 g 或 gcc 我尝试像这样将 g 下载到服务器上sudo apt get install g 但是我没有root权限 我还尝试将 g 副本复制
  • 如何将特殊字符 (0x80..0x9F) 写入 Windows 控制台?

    我想要这段代码 System Console Out WriteLine il display il代替oil正如我的测试程序中所做的那样 The Console OutputEncoding默认设置为Western European DO
  • 如何防止禁用的 ToolStripMenuItem 在鼠标悬停时显示边框?

    Yes exactly same as the title in my project some of toolstripmenuitems were disabled But when i bring the cursor over th

随机推荐

  • 如何将一组行从一个函数传递到另一个函数?

    Overview 我正在使用 PostgreSQL 9 1 14 并且我试图将一个函数的结果传递到另一个函数中 总体思路 具体细节 下面是一个最小的例子 是我们可以写 select from select from foo 我们可以将子选择
  • 可以取消链接以读写方式打开的文件

    在我的程序 在 Mac OS X 上 中 我使用以下代码打开该文件 int fd fd open filename O RDWR 删除文件的程序如下 unlink filename 就我而言 我有相同的文件被打开和删除 我观察到以下情况 打
  • Prolog:不等式运算符

    我正在使用 SICStus Prolog 并有一组事实 student John Henry Maths student Jim Henry Maths student John Alan Maths student Alan Smith
  • 类型错误:无法调用 null 的方法“getActiveSheet”。在 myFunction(代码:6)

    在日志中我可以看到应用程序已被定义为 SpreadsheetApp 但 getActiveSpreadsheet 返回 null 这反过来又导致 getActiveSheet 说它无法调用带有 null 的方法 我已经尝试清除浏览器历史记录
  • 不在默认的 src/test/java 文件夹中运行 Maven 测试

    我有一个项目包含pom xml还有一些JUnit测试 两个都pom xml和单元测试是正确的 但问题是测试不在 src test java 文件夹中 我无法使用此文件夹 是否可以告诉maven从另一个源文件夹 也在这个项目中 执行测试 将此
  • python中带括号和不带括号调用函数有什么区别? [复制]

    这个问题在这里已经有答案了 我有个问题 假设我们有函数 hello 带括号和不带括号调用有什么区别 当我调用 hello 时 它引用的是一个值等于此函数的对象 或者也许我错了 当我不带括号调用它时会发生什么 我想知道为什么 def hell
  • 有没有办法增加 Intellisense 的弹出延迟?

    今天我意识到我花在消除 Intellisense 弹出窗口上的时间比使用它们的时间还多 我仍然想使用 Intellisense 但我希望它在延迟 例如 1 秒 后显示 我正在使用 Visual Studio 2015 和 Resharper
  • jQuery 事件在 mouseup 时停止

    我正在尝试制作一个非常简单的应用程序 当鼠标按钮按下时 用户可以使用选定的颜色绘制到表格中 当鼠标松开时事件停止 绘图效果很好 唯一的问题是释放鼠标时事件不会停止 我已经尝试过很多方法 但显然我做错了 还尝试了绑定和取消绑定事件 但也不起作
  • 升级到 Angular v9 并启用 Ivy 后 Angular 编译失败

    我们最近将 Angular 应用程序升级到了最新版本的 Angular Angular v9 我们所有的依赖项也都升级了 ng update 表示我们所有的依赖项都 按顺序 当我们在启用 Ivy 的情况下构建应用程序时 编译过程会失败并出现
  • android下拉刷新列表视图出错

    我正在使用功能下拉来刷新library https github com chrisbanes Android PullToRefresh克里斯班斯的 但是当我尝试在我的 xml 文件中导入这个小部件时 它向我显示以下错误 请帮助我如何解决
  • React Native:找不到变量:需要

    我正在尝试修改一个反应原生样板 https github com rayandrews razzle rnw redux loadable这样我就可以在Android平台上运行了 I installed the expo package a
  • 独立 Spring OAuth2 JWT 授权服务器 + CORS

    所以我有以下浓缩的授权服务器这个例子 https github com dsyer spring security angular blob master oauth2 authserver src main java demo Auths
  • 分页打印所有数据

    我在打印数据表中具有分页的所有数据时遇到问题 我已经做过研究并在此链接中发现了同样的问题 仅打印 https stackoverflow com questions 468881 print div id printarea div onl
  • Erlang 映射:remove/2 和映射:without/2 之间的实际区别

    检查过R17 新功能之一的文档 http www erlang org doc man maps html remove 2 地图 让我看到了maps remove 2 和maps without 2 我能看到的唯一明显的区别是 remov
  • 如何在不重新加载页面的情况下刷新角度8中的元素?

    我正在通过单击按钮更新数据库列 并且我想在单击后更改按钮 如何在不刷新页面的情况下实现这一目标 下面是我的代码 只有当我刷新页面时它才能正常工作
  • django-ckeditor 上传的图像的绝对路径

    我在用django rest framework和这个结合django ckeditor 我正在提供一些带有绝对 url s 的图像 没有任何问题 但是ckeditor上传的图片和文件是相对路径 由于位于不同的域中 因此无法在客户端显示 这
  • 仅调用一次/在 AngularJS 服务中缓存来自 $http get 的数据

    这可能听起来像一个非常简单 愚蠢的问题 但我需要问它 因为我之前没有遇到过这种情况 好吧 我的 angularJS 应用程序中有一项服务 该服务当前包含 4 个方法 它们都执行 80 相同的功能 代码 我希望提高效率 这是我的服务的样子 删
  • Yii 验证场景是否可以在 enableClientValidation 设置为 true 的情况下工作?

    这里使用 Yii 1 1 8 有谁知道 Yii 验证场景是否适用于客户端 Yii 验证 enableClientValidation gt true Yii 将使用您构建表单时设置的场景 因此 无论表单初始化时的情况如何 ActiveFor
  • 更改材质表反应中“操作”的样式

    我一直在我的一个项目中使用材料表 虽然我可以更改用户定义列的样式 字体大小 颜色 但我无法对 操作 列执行此操作 我对更改字体大小特别感兴趣 与分页相同的问题 我需要更改其字体大小 但似乎没有可用的选项 请举一个例子 https mater
  • 创建新文件夹的“Shell 命名空间”方式是什么?

    显然 这对于 win32 api CreateDirectory 来说是微不足道的 但我正在尝试托管一个 IShellView 并且希望以最面向 shell 的方式来做到这一点 我本以为 IShellFolder 中会有一个 createo