标签: shell-extensions

编写类似于程序集缓存查看器的Windows Shell扩展

我想编写一个shell扩展来完全自定义特定文件夹的显示,如组装缓存查看器(浏览到c:\ windows\assembly,你会明白我的意思).哪些COM接口负责提供这些钩子?我的"观众"将用C#编写......

谢谢!

c# shell-extensions

3
推荐指数
1
解决办法
1922
查看次数

如何在Delphi中编写Windows Shell命名空间扩展?

首先,抱歉我的英语不好......

我想使用命名空间扩展(NSE)向Windows资源管理器添加一个虚拟文件夹,我希望用户能够打开这个虚拟文件夹来探索一些路径(例如c:\test).

我怎么能用Delphi做到这一点?谢谢.

windows delphi winapi windows-shell shell-extensions

3
推荐指数
1
解决办法
1836
查看次数

安装和注册shell扩展上下文菜单来自wix安装程序

我创建了锐利的shell扩展,用于使用.Net自定义Windows的右键菜单上下文.该项目的结果是.dll.我尝试使用服务器管理器工具安装和注册它,该工具与尖锐的shell工具一起存在并且它成功运行.现在我需要从我的wix项目安装并注册这个shell扩展,因为我需要用户安装我的应用程序并在安装后获得自定义窗口的右键单击上下文菜单.

我需要详细的步骤,因为我是使用Wix安装程序的新手.

c# installation contextmenu wix shell-extensions

3
推荐指数
1
解决办法
1156
查看次数

Windows注册表文件关联菜单

我最近(今天)开始在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的名称出现在".*"后面,但至于大胡言乱语的含义我不知道.

windows delphi registry shell-extensions

2
推荐指数
1
解决办法
3615
查看次数

EnableMenuItem函数未使用参数MF_GRAYED

创建了一个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)

c++ windows shell-extensions menuitem

2
推荐指数
1
解决办法
3898
查看次数

如何使用shell扩展dll C++在上下文菜单之间添加分隔符

我使用Shell扩展DLL(C++)创建了一个上下文菜单.当用户单击任何资源管理器文件夹时,将显示新创建的上下文菜单,其中包含子菜单.我想在子菜单之间添加一个行分隔符

winapi windows-shell shell-extensions

2
推荐指数
1
解决办法
2647
查看次数

资源管理器上下文菜单的 Shell 扩展,图标打破了经典 Windows 设计中的对齐方式

我遇到以下问题,

当为 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)

c++ explorer icons contextmenu shell-extensions

2
推荐指数
1
解决办法
1278
查看次数

Shell Extension DLL - 如果用户在文件夹空白区域内单击,如何捕获文件夹路径?

使用shell扩展dll,如果用户在文件夹空白区域内单击,如何捕获文件夹路径?

c++ windows shell-extensions

1
推荐指数
1
解决办法
1048
查看次数

在COM中绝对必须调用QueryInterface()吗?

C ++ / COM Shell扩展教程中,程序员演示了(出于启发目的)您可以放弃调用,QueryInterface()而只是传递一个通用对象。至少在实施时有效DllGetClassObject()。他说,的目的QueryInterface()仅仅是让每个对象自己说出是否支持给定的接口。

与此同时,微软似乎的是QueryInterface()要获得一个指向特定接口的对象上。

那么到什么程度是QueryInterface()必要的?有什么时候调用QueryInterface()绝对必要的,没有它,代码将无法工作?还是像视频教程所建议的那样,使对象本身在技术上足够?

c++ com winapi shell-extensions queryinterface

1
推荐指数
1
解决办法
159
查看次数