在不弹出多个提示窗口的情况下,通过上下文菜单打开超过15个文件

6

我已经添加了右键菜单选项,可以使用我的C++程序打开文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Open With MyProgram]
"Icon"="\"C:\\Program Files (x86)\\myProgram.exe\""

[HKEY_CLASSES_ROOT\*\shell\Open With MyProgram\command]
@="\"C:\\Program Files (x86)\\myProgram.exe\" \"%1\""

这很正常,当我选择超过15个文件时,右键单击选项会消失。 我已经阅读了有关使用MultipleInvokePromptMinimum方法的以下方法:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"MultipleInvokePromptMinimum"=dword:00001388

这会完成工作,唯一的问题是我不想为超过15个文件启用其他“打开”或“打印”右键单击选项,只想要我的自定义选项。例如,“使用Notepad++编辑”右键单击选项已启用超过15个文件而未更改MultipleInvokePromptMinimum。
有什么最好的方法来实现这一点?提前感谢您。

1
你尝试过将MultiSelectModel设置为Player吗?https://msdn.microsoft.com/zh-cn/library/windows/desktop/hh127436(v=vs.85).aspx - Denis Anisimov
1
谢谢!我将MultiSelectModel设置为Player,现在我能够通过右键单击选项打开多达100个文件。对于超过100个文件的情况,该选项仍然出现,但如果我选择它,它只会打开1个文件。我猜我必须将我的应用程序实现为“COM”而不是“Legacy”,以便使用我的应用程序打开无限数量的文件。您知道如何将我的程序实现为COM吗? - tk_
1
我认为最简单的方法是创建IDropTarget shell扩展,然后将子键“DropTarget”添加到您的子键“Open With MyProgram”中。在您的IDropTarget shell扩展中,您可以做任何想做的事情。例如,您可以创建一个文件列表文本文件,并将其传递给您真正的“Legacy”应用程序。 - Denis Anisimov
tk_ - 你是如何通过上下文菜单打开100个文件的?我也在尝试这样做,但我的应用程序会打开多个实例。我想选择多个图像并单击我的菜单,将图像列表传递给应用程序。 - Hardik Shah
1个回答

3

从评论中您已经了解到,一个普通的静态动词有一个限制,可以通过将MultiSelectModel设置为player将其提高到100。 explorer仅允许基于COM的Shell扩展超越此限制。

您可以实现多种类型的Shell扩展,具体取决于您支持的最低Windows版本:

  • IExecuteCommand是最少工作量的,但只能在Windows 7及更高版本上使用。有关教程/示例,请访问此处

  • IDropTarget需要一个完整的COM服务器,但可在Windows XP及更高版本上使用。有关教程/示例,请访问此处

  • IContextMenu注册在 ShellEx\ContextMenuHandlers下,在每个Windows版本上都可用,但这些旧系统上不存在选择限制,因此在您的情况下不需要实现它。

建议您使用C/C++或Delphi编写扩展,而不是使用.NET语言,如C#(这是根据Windows和.NET版本的建议或要求)。


我知道已经有一段时间了,但是我该如何超过100个文件的最低限制? - Chibs
2
@Chibs 在注册表中的普通静态条目无法绕过100个限制。您必须实现一个Shell扩展程序。 - Anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接