我想编写一个shell扩展来完全自定义特定文件夹的显示,如组装缓存查看器(浏览到c:\ windows\assembly,你会明白我的意思).哪些COM接口负责提供这些钩子?我的"观众"将用C#编写......
谢谢!
首先,抱歉我的英语不好......
我想使用命名空间扩展(NSE)向Windows资源管理器添加一个虚拟文件夹,我希望用户能够打开这个虚拟文件夹来探索一些路径(例如c:\test).
我怎么能用Delphi做到这一点?谢谢.
我创建了锐利的shell扩展,用于使用.Net自定义Windows的右键菜单上下文.该项目的结果是.dll.我尝试使用服务器管理器工具安装和注册它,该工具与尖锐的shell工具一起存在并且它成功运行.现在我需要从我的wix项目安装并注册这个shell扩展,因为我需要用户安装我的应用程序并在安装后获得自定义窗口的右键单击上下文菜单.
我需要详细的步骤,因为我是使用Wix安装程序的新手.
我最近(今天)开始在Delphi中使用我的注册表进行meddeling.:)所有工作正常,我的自定义文件类型现在打开我的程序,但有2个问题,我无法解决.
1)我想要从所有文件类型"打开"的选项,所以我添加
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
reg.LazyWrite := false;
reg.OpenKey('*\OpenWithList\EncryptionSystem', true);
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
reg.CloseKey;
reg.free;
Run Code Online (Sandbox Code Playgroud)
如果我使用regedit查看注册表,它肯定会出现,但是当我右键单击一个文件并选择打开它时它不存在...
所以我加了这个
reg.OpenKey('*\shell\Encrypt\command', true);
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
reg.CloseKey;
Run Code Online (Sandbox Code Playgroud)
这适用于每个文件,但选项位于顶部,带有"打开"和"编辑".我有点希望它像大多数程序一样出现在菜单子部分中...我意识到我需要使用shellext但我不理解这些如何与上下文菜单处理程序一起工作的结构...我已经学会了所有无论如何我从阅读注册表...我知道shellext的名称出现在".*"后面,但至于大胡言乱语的含义我不知道.
创建了一个ATL COM项目,通过该项目我将菜单项插入右键菜单,如下所示:
STDMETHODIMP CSimpleShlExt::QueryContextMenu (
HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd,
UINT uidLastCmd, UINT uFlags )
{
gHMenu=hmenu;
UINT uCmdID = uidFirstCmd;
// If the flags include CMF_DEFAULTONLY then we shouldn't do anything.
if ( uFlags & CMF_DEFAULTONLY )
return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 );
InsertMenu ( hmenu, uMenuIndex, MF_BYPOSITION, uCmdID++, _T("Connect To Server") );
uMenuIndex++;
InsertMenu ( hmenu, uMenuIndex, MF_BYPOSITION, uCmdID++,
_T("DisConnect From Server") );
return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 2 );
}
Run Code Online (Sandbox Code Playgroud)
现在我想在用户点击它时立即禁用Connect子菜单,为此我使用的是EnableSubMenuItem,
STDMETHODIMP CSimpleShlExt::InvokeCommand …Run Code Online (Sandbox Code Playgroud) 我使用Shell扩展DLL(C++)创建了一个上下文菜单.当用户单击任何资源管理器文件夹时,将显示新创建的上下文菜单,其中包含子菜单.我想在子菜单之间添加一个行分隔符
我遇到以下问题,
当为 Windows 资源管理器的上下文菜单添加条目并且 Windows 7 设计设置为经典时,图标会破坏菜单的对齐方式。
此图显示添加条目之前的菜单(请注意 Microsoft Security Essentials 的图标):

添加菜单项后,它看起来像这样:

您会看到 Microsoft Security Essentials 的图标和菜单标题之间有一个空格。使用的位图是标准 bmp 16 x 16。
有谁知道为什么会发生这种情况?再说一遍,这只发生在 Win 7 经典设计中,其他设计也能按预期工作。
在此先感谢您的帮助
编辑:
这是我添加该项目的初始代码:
iconHandle = LoadImageW(NULL, iconPath.c_str(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT | LR_LOADFROMFILE);
MENUITEMINFOW contextEntryAppSuite = { sizeof(contextEntryAppSuite) };
contextMenuItem.fMask = MIIM_STRING | MIIM_STATE | MIIM_BITMAP | MIIM_FTYPE | MIIM_ID;
contextMenuItem.dwTypeData = caption;
contextMenuItem.wID = 0;
contextMenuItem.fType = MFT_STRING;
contextMenuItem.fState = MFS_ENABLED;
contextMenuItem.hbmpItem = static_cast<HBITMAP>(iconHandle);
if(!InsertMenuItemW(hMenu, indexMenu, TRUE, &contextMenuItem))
{
return HRESULT_FROM_WIN32(GetLastError()); …Run Code Online (Sandbox Code Playgroud) 使用shell扩展dll,如果用户在文件夹空白区域内单击,如何捕获文件夹路径?