我为扩展名为.mpq的存档类型制作了一个浏览器程序,这在暴雪游戏中很常用.
它就像一个资源管理器,但只探索MPQ档案中的文件.
现在,我们都知道Windows资源管理器如何浏览.zip档案,我很乐意打开具有如此丰富功能的.MPQ文件.
这甚至可能吗?所以有可能......
如果是这样,那怎么样?Shell文件夹......
有人可以请我举个例子吗?(C#)我不能只将C++翻译成C#...
所以我搜索了如何使用C#将应用程序(将其添加到右键菜单)进行shell集成的指南,但我找不到如何仅针对特定文件类型执行此操作.我知道这是可能的,因为WinRar会这样做.那我该怎么办呢?
名为SharpShell的 .NET Shell 扩展框架很棒;我开发了一个“非常容易”的右键单击文件 Shell ContextMenu,它可以同时选择文件和目录。
现在,我想通过右键单击空白区域(即,在桌面上或在文件夹内的白点上)来开发 Shell ContextMenu。是否有可能仍然使用 SharpShell?或者我需要转向不同的解决方案吗?......在第二种情况下......你有什么建议?
谢谢
我正在使用SHChangeNotifywithSHCNE_RMDIR通知 shell 已从我的shell 命名空间扩展中删除的文件夹。我的期望是,这将导致任何将其文件夹视图导航到已删除文件夹(或其任何子文件夹)的资源管理器(或其他 shell)窗口导航到已删除文件夹的父文件夹。这种预期行为发生在 Windows 10 上。但是,在 Windows 7 上,这些窗口将导航到已删除的文件夹。
Windows 7 上的这种行为是否是一个错误,和/或者我可以做些什么(无需针对 Windows 7 的特殊代码)来为两个操作系统获得相同的行为?
以下是如何从头开始创建和观察问题的演练。这涉及使用称为Shell 实例对象的“内置”Microsoft 命名空间扩展(而不是我真正的命名空间扩展)。我使用它是为了简单起见,也是为了表明它与我的特定命名空间扩展无关。此示例命名空间扩展所做的全部工作是在“我的电脑”下创建一个图标,该图标将浏览到您的 %TEMP% 目录。
安装命名空间扩展并在“我的电脑”下注册。为此,请在注册表中输入以下内容:
HKEY_CURRENT_USER\Software\Classes\CLSID
{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}=REG_SZ_EXPAND:"My Namespace Extension"
DescriptionID=REG_DWORD:0x00000008
System.IsPinnedToNameSpaceTree=REG_DWORD:0x00000001
DefaultIcon=REG_EXPAND_SZ:"%SystemRoot%\system32\main.cpl,9"
InProcServer32=REG_EXPAND_SZ:"%SystemRoot%\system32\shdocvw.dll"
ThreadingModel=REG_SZ:"Apartment"
ShellFolder
Attributes=REG_DWORD:0x60000000
Instance
CLSID=REG_SZ:"{0AFACED1-E828-11D1-9187-B532F1E9575D}"
InitPropertyBag
Attributes=REG_DWORD:0x00000011
Target=REG_SZ_EXPAND:"%TEMP%"
Run Code Online (Sandbox Code Playgroud)
这是一个 .reg 文件,可以为您自动执行此操作:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}]
@="My Namespace Extension"
"System.IsPinnedToNameSpaceTree"=dword:00000001
"DescriptionID"=dword:00000008
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,61,00,\
69,00,6e,00,2e,00,63,00,70,00,6c,00,2c,00,39,00,00,00
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}\InProcServer32]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,\
64,00,6f,00,63,00,76,00,77,00,2e,00,64,00,6c,00,6c,00,00,00
"ThreadingModel"="Apartment"
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}\Instance]
"CLSID"="{0AFACED1-E828-11D1-9187-B532F1E9575D}"
[HKEY_CURRENT_USER\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E4}\Instance\InitPropertyBag]
"Attributes"=dword:00000011
"Target"=hex(2):25,00,54,00,45,00,4d,00,50,00,25,00,00,00 …Run Code Online (Sandbox Code Playgroud)有没有办法以编程方式调用DLL扩展的DLL?我们使用在Windows资源管理器上注册shell扩展的软件,我需要在其上下文菜单中调用其中一个可用的项目.我没有想要调用的软件源代码.
编辑
仅当我在Windows资源管理器中选择PDF文件时,才会显示此上下文菜单.所以我需要调用它传递一个dll文件.
编辑
注册信息:
[HKEY_CLASSES_ROOT\CLSID {2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}] @ ="PDFTransformer3.PDFTContextMenu.1"
[HKEY_CLASSES_ROOT\CLSID {2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\InprocServer32] @ ="C:\ Program Files\ABBYY PDF Transformer 3.0\PDFTContextMenu.dll""ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID {2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\ProgID] @ ="PDFTransformer3.PDFTContextMenu.1"
[HKEY_CLASSES_ROOT\CLSID {2DC8E5F2-C89C-4730-82C9-19120DEE5B0A} \可编程]
[HKEY_CLASSES_ROOT\CLSID {2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\VersionIndependentProgID] @ ="PDFTransformer3.PDFTContextMenu"
编辑
是否可以ShellExecuteEx使用我想要的动词(不是默认动词)来调用?如果是这样,我如何调用我想要的动词(使用DLL)?
多数民众赞成我想要一个PDF文件的动词:

如何遍历IContextMenu的所有项目和子项并列出所有可用的动词?到目前为止,我从JCL中提取了这个工作代码:
function DisplayContextMenuPidl(const Handle: THandle; const Folder: IShellFolder; Item: PItemIdList; Pos: TPoint): Boolean;
var
Cmd: Cardinal;
ContextMenu: IContextMenu;
ContextMenu2: IContextMenu2;
Menu: HMENU;
CommandInfo: TCMInvokeCommandInfo;
CallbackWindow: THandle;
vteste : string;
begin
Result := False;
if (Item = nil) or (Folder = nil) then
Exit;
Folder.GetUIObjectOf(Handle, 1, Item, IID_IContextMenu, nil,
Pointer(ContextMenu));
if ContextMenu <> nil then
begin
Menu := CreatePopupMenu;
if Menu <> 0 then
begin
if Succeeded(ContextMenu.QueryContextMenu(Menu, 0, 1, $7FFF, CMF_EXPLORE)) then
begin
CallbackWindow := 0;
if Succeeded(ContextMenu.QueryInterface(IContextMenu2, ContextMenu2)) then
begin …Run Code Online (Sandbox Code Playgroud) 对于shell扩展(UI类似于"New /"上下文菜单),我需要创建一个文件,选择它并进入"重命名"模式,这样用户就可以调整默认名称.
问:如何为文件输入"重命名"模式?
我试图在Windows 8.1中实现自定义ShellExtension.发现真的很好的SharpShell教程.
[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
public class CountExtProvider : SharpContextMenu
{
protected override bool CanShowMenu()
{
// We will always show the menu.
return true;
}
protected override ContextMenuStrip CreateMenu()
{
// Create the menu strip.
var menu = new ContextMenuStrip();
// Create a 'count lines' item.
var itemCountLines = new ToolStripMenuItem
{
Text = "Count Lines"
};
// When we click, we'll call the 'CountLines' function.
itemCountLines.Click += (sender, args) => CountLines();
// Add the item to …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2010中编写了一个Shell扩展.它实现了一个Context Menu Handler和File Icon Handler.
在使用Visual Studio的计算机上,它运行良好.但在其他计算机上,注册MyShellExt.dll失败并显示消息
[窗口标题]
的RegSvr32
[内容]
模块"MyShellExt.dll"无法加载.
确保二进制文件存储在指定的路径中或对其进行调试以检查二进制或从属.DLL文件的问题.
指定的模块无法找到.
[好]
我检查了依赖项,发现以下文件必须与MyShellExt.dll在同一个文件夹中:msvcr100.dll,msvcp100.dll,atl100.dll.
这意味着我应该将这些库包含在我的安装包中.
如何关闭使用这些库?
我的Win32应用程序需要安装Windows资源管理器Shell扩展。
我已使用Desktop App Converter为我的应用程序生成AppX。但是转换器忽略了由应用程序的旧版安装程序安装的Shell扩展。
当它捕获到的Classes\Directory\shellex密钥时Registry.dat,密钥条目指向未捕获的CLSID。即使它确实捕获了引用的CLSID,它也指向旧版安装程序在其中安装应用程序的路径,而不是指向将要安装AppX的实际位置。
我在考虑第一次运行时由应用程序本身注册扩展。但是安装位置中的C:\Program Files\WindowsApps权限受到限制,因此regsvr32失败。
无法加载模块“ C:\ Program Files \ WindowsApps \ WinSCP_5.14.0.0_x86__2dz6xbp7ps3z2 \ DragExt64.dll”。
确保二进制文件存储在指定的路径或对其进行调试,以检查二进制文件或相关的.DLL文件是否存在问题。
访问被拒绝。
权限的确允许将文件复制到其他位置。因此,我可以将.dll复制到例如用户配置文件(C:\Users\...)并从那里注册。但这将在卸载AppX时留下.dll。
有更好的解决方案吗?
shell-extensions appx uwp desktop-app-converter desktop-bridge
shell-extensions ×10
c# ×5
windows ×3
delphi ×2
winapi ×2
.net ×1
appx ×1
archive ×1
c++ ×1
contextmenu ×1
dll ×1
explorer ×1
file-type ×1
registry ×1
sharpshell ×1
shell32 ×1
uwp ×1
windows-8.1 ×1