问题标签 [shell-extensions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
779 浏览

windows - Windows Explorer Shell 扩展:创建文件并进入“重命名”模式

对于外壳扩展(UI 类似于“New/”上下文菜单),我需要创建一个文件,选择它并进入“重命名”模式,以便用户可以调整默认名称。

问:如何进入文件的“重命名”模式?

0 投票
1 回答
475 浏览

windows - 如何替换 Explorer 的 TIF 图像处理程序?

我为 Windows 资源管理器创建了一个缩略图处理程序(shell 扩展),用于处理多种 TIF/TIFF 图像格式。我知道资源管理器已经包含 TIFF 支持(由 Windows XP 附带的 shimgvw.dll 扩展提供),但我想用我自己的图像处理程序扩展替换它。

如果我注册我的扩展(通过 ShellEx/{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}),并取消注册 shimgvw.dll(通过 regsvr32 /u shimgvw.dll),我的缩略图处理程序扩展工作,但这会产生一个问题:shimgvw .dll 还处理 BMP、JPG、PNG 等几种常见图像格式的缩略图,因此在取消注册后,对这些格式的支持将被禁用。

有什么方法可以使我的扩展工作(仅适用于 .tif 文件)而无需注销 shimgvw.dll?提前致谢!

0 投票
1 回答
1109 浏览

c# - 是否有用于文件的 ICopyHook.CopyCallback 或替代方法?

我们使用ICopyHook.CopyCallback shell 扩展来检测删除、移动、创建文件夹,而不是文件 链接,如何检测用户是否正在从 C# 应用程序中删除文件,或者如何处理用户的删除操作?示例:用户在 f1.txt 上按下 Shift + DEL,然后操作系统询问“Are Yuo sure You Want to delete 'f1.txt'?,如果用户按下'yes',则 C# 应用程序将通过以下方式处理删除操作以透明的方式将“f1.txt”移动到某个隐藏文件夹{例如}???

注意:我认为 FileSystemWatcher 不能做这个任务..

0 投票
1 回答
1380 浏览

c# - 关闭父级时关闭子级对话框

我正在使用EZShellExtensions.NET在 C# 中编写 Windows shell 扩展。

我提供了一个显示对话框的上下文菜单。

假设我显示了一个资源管理器窗口 (A)。然后我使用上下文菜单显示非模态窗口 (B)。

在 Windows XP 和 Windows Vista 中,当我关闭 A 时,B 也会关闭(我想要这种行为)。但是,在 Windows 7 中,当我关闭 A 时,B 并未关闭,但它不响应事件。我的问题是:

  • 你知道为什么 Windows 7 将显示的窗体作为子窗体管理吗?
  • 如果我关闭 A,有没有办法维持消息循环?

编辑:如果我将 A 设置为 B 的所有者,当我关闭 A 时,B 也会关闭。但它产生了一个新问题。B总是在A之上。

0 投票
1 回答
126 浏览

windows - Windows 资源管理器收藏夹作为按钮?

我经常使用 Windows Explorer 中的收藏夹来快速访问深度嵌套的文件夹。但是我发现总是必须单击菜单中的“收藏夹”按钮,然后在下拉列表中搜索我要查找的收藏夹,这很烦人。

是否有将特定收藏夹作为按钮添加到 Windows 资源管理器?

我正在使用 XP x64。

谢谢你的帮助!

0 投票
1 回答
2461 浏览

c++ - C++ Shell 上下文菜单扩展

我尝试为 Windows 文件/文件夹创建上下文菜单扩展。我已经尝试了很多,但没有什么对我有用。我已经为 32 位系统提供了这样的扩展,但它已经过时了。我想为 64 位系统使用 C++ 重新创建它。

这个最接近我想要做的:Klick 但这适用于 32 位系统。阅读评论后,我能够为 x64 修改和构建它。

在我的 64 位系统上使用 system32/regsvr32.exe 注册它,表明它已成功注册。所有注册表项均已正确创建。但是菜单项没有出现。我不知道为什么...

有人能帮我吗?如果你愿意,我可以为你上传项目。

更新

我使用上面链接中的原始项目并更改了以下内容:

1)将目标设置为“x64”

2)由于我无法编译它,我更改了以下内容:

2.1)在 stdafx.h 中包含之前,我添加了:

2.2)我在这里将 UINT 更改为 UINT_PTR :

3)我将 .rgs 文件中的 txtfile 更改为 *,以便它应该适用于所有文件类型。

4)我能够编译和注册它

如果你不能帮助我,如果你能上传一个模板会很酷,这将在 x64 系统上工作。

0 投票
0 回答
639 浏览

c++ - c++ shell 扩展 - 无法在 32 位上注册

我使用这个 Template创建了一个 C++ Shell 上下文菜单扩展。

在 64 位计算机上,它工作得很好,但我无法在 32 位计算机上注册它。即使是未经修改的项目原始版本也不起作用。

我知道我必须将目标设置为Win32,然后编译它。

有人知道我为什么注册不了吗?

错误信息是:

模块“fmshell32.dll”加载失败。确保二进制文件存储在指定路径或对其进行调试以检查二进制文件或相关 .DLL 文件是否存在问题。指定的模块无法找到。

我尝试使用注册它

我在 32 位计算机上尝试过,我使用的是 32 位 dll。

0 投票
0 回答
288 浏览

c# - Windows 7 Explorer 是否支持自定义列的多行文本?

我已经使用 .NET 4.0 为 Windows 资源管理器实现了一个自定义属性处理程序。除了具有多个值的列显示在由“;”分隔的同一行之外,一切正常。我尝试将 drawControl 的控件属性设置为 Default、MultiLineText 和 MultiValueText,但仍然没有成功。我想要实现的是将每个值放在单独的行上,而不是用“;”分隔。

这是我注册的propdesc文件的propertyDescription:

下面是 IPropertyStore 接口的 GetValue 方法的实现:

0 投票
1 回答
502 浏览

windows - Windows 资源管理器外壳扩展:通过 ITransferSource::RemoveItem 递归删除?

我正在为 Windows 7 上的网络文件系统实现 Windows Explorer Shell 扩展,并且在实现删除功能时遇到了障碍。

假设我的远程文件系统层次结构如下:

我的理解是您需要实现ITransferSource::RemoveItem(我已经完成了),但我希望首先从文件系统树中最远的孩子递归调用(即深度优先递归遍历):

发生的情况是,我首先被称为根,然后是每个孩子,迭代地:

这对我来说有点奇怪,因为 Shell 已经递归地遍历所有要删除的项目以显示操作的进度条(“发现项目”对话框)。我的远程文件系统不支持删除非空目录;据我所知,Windows 上的本地文件系统也有同样的限制。我在 MSDN 上找不到任何关于更改迭代顺序的提示。

我假设实际的迭代顺序取决于文件系统中项目的创建顺序。

实现此接口方法时,COPYENGINE_S_DONT_PROCESS_CHILDREN如果您自己递归并删除整个树,则可以返回,但我认为这将不允许用户取消正在进行的删除(就像标准的 Explorer shell 一样)。我认为这是一个次优的解决方案,但如果我找不到更好的解决方案,它可能不得不这样做。

我的第一个想法是将非空目录删除请求排队以备后用,但我认为这不会起作用,因为扩展程序不知道目录的所有子项的删除操作何时完成。我还可以生成一个线程以“稍后”删除这些项目,但这几乎肯定会产生奇怪的无法解释的行为和崩溃。

所以,我想我的问题是,在 Windows 7 Shell 扩展中实现删除操作的正确方法是什么?

PS:您可能会说,Windows Shell Extensions 对我来说是一个全新的话题,所以如果问题不完整,我提前道歉;我会根据需要完善我的问题。

谢谢!

0 投票
1 回答
589 浏览

c++ - C++ Windows Shell 扩展 - Win7 32bit - 64bit 兼容性问题

我有 Visual Studio 2005,我正在为 Windows 资源管理器编写一个 shell 扩展。

它适用于我编译项目的 Windows Vista 32 位。当项目在 Windows7 64 位上编译时,它也适用于 Windows 7 64 位。

现在,当项目已在 Windows Vista 32 位上编译但它不起作用时,我也想在 Windows 7 32 位上对其进行测试!

c++ 版本之间是否存在兼容性问题?

外壳扩展 dll 不会注册。(并排错误)。

是否有必要在 Windows 7 32bit 上编译它才能使其工作?

我的 dll 是基于 codeproject.com 上的“完整的白痴编写 shell 扩展指南”的示例

谢谢 !