Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何用特定的文件扩展名注册Shell扩展名_C++_Windows_Windows Shell_Shell Extensions - Fatal编程技术网

C++ 如何用特定的文件扩展名注册Shell扩展名

C++ 如何用特定的文件扩展名注册Shell扩展名,c++,windows,windows-shell,shell-extensions,C++,Windows,Windows Shell,Shell Extensions,我已经测试了一个小型shell扩展,它引用了on-code项目。虽然整个过程相当复杂,但我知道下面的方法和方法 初始化、DragQueryFile、GetCommandString、InvokeCommand、QueryContextMenu 但读完后,我无法理解我们的ContextMenu扩展名是如何与.txt文件相关联的 本文解释了如果我们查看.rgs文件,我们可以看到它创建了如下注册表项: HKCR { NoRemove txtfile { NoRemove ShellEx

我已经测试了一个小型shell扩展,它引用了on-code项目。虽然整个过程相当复杂,但我知道下面的方法和方法

初始化、DragQueryFile、GetCommandString、InvokeCommand、QueryContextMenu

但读完后,我无法理解我们的ContextMenu扩展名是如何与.txt文件相关联的

本文解释了如果我们查看.rgs文件,我们可以看到它创建了如下注册表项:

HKCR
{
  NoRemove txtfile
  {
    NoRemove ShellEx
    {
      NoRemove ContextMenuHandlers
      {
        ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}'
      }
    }
  }
}
但实际上,在看完本文并编写代码之后,当我打开
simpleslex.rgs
时,它看起来是这样的:

HKCR
{
  NoRemove txtfile
  {
    NoRemove ShellEx
    {
      NoRemove ContextMenuHandlers
      {
        ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}'
      }
    }
  }
}
--在CodeProject中编辑--

HKCR
{

    NoRemove CLSID
    {
        ForceRemove {1E569362-E0A6-4DEA-AB1F-67D6D3DEF1A5} = s 'SimpleShExt Class'
        {

            InprocServer32 = s '%MODULE%'
            {
                val ThreadingModel = s 'Apartment'
            }

        }
    }
}
注册表是否动态创建CLSID和txtfile reg项之间的任何映射


如果是这种情况,如果我想修改任何其他文件的行为,例如mp3文件或驱动器本身,并且我想弹出或显示我的上下文菜单,那么该如何进行。因为我不知道这方面的CLSID。

一种可能是注册您想要支持的所有文件扩展名的上下文菜单。另一种可能是在wildcard/*类中注册扩展。然后,它将为所有文件实例化。然后,您可以决定上下文菜单对此文件是否可见。这可以通过使用IShellExtInit::Initialize的IDataObject参数来完成。

一种可能是为您想要支持的所有文件扩展名注册上下文菜单。另一种可能是在wildcard/*类中注册扩展。然后,它将为所有文件实例化。然后,您可以决定上下文菜单对此文件是否可见。这可以通过使用IShellExtInit::Initialize的IDataObject参数来完成。

您必须将要使用txt文件扩展名注册的部件手动添加到rgs文件中。Visual Studio仅添加要注册外壳扩展名的部件。

您必须将要注册txt文件扩展名的部件手动添加到rgs文件中。Visual Studio仅添加部件以注册外壳扩展。

假设库的
uuid
5E2121EE-0300-11D4-8D3B-444553540000
,然后使用以下命令将外壳扩展与
*.txt
*.tab
文件关联。为每个新扩展添加另一个块:

NoRemove .txt  
{  
    NoRemove shellex  
    {  
        {00021500-0000-0000-C000-000000000046} = s '{5E2121EE-0300-11D4-8D3B-444553540000}'  
    }  
}  
NoRemove .tab  
{  
    NoRemove shellex  
    {  
        {00021500-0000-0000-C000-000000000046} = s '{5E2121EE-0300-11D4-8D3B-444553540000}'  
    }  
}

假设库的
uuid
5E2121EE-0300-11D4-8D3B-444553540000
,则使用以下命令将shell扩展与
*.txt
*.tab
文件关联。为每个新扩展添加另一个块:

NoRemove .txt  
{  
    NoRemove shellex  
    {  
        {00021500-0000-0000-C000-000000000046} = s '{5E2121EE-0300-11D4-8D3B-444553540000}'  
    }  
}  
NoRemove .tab  
{  
    NoRemove shellex  
    {  
        {00021500-0000-0000-C000-000000000046} = s '{5E2121EE-0300-11D4-8D3B-444553540000}'  
    }  
}

如果您有任何代码Spinet或相关文章please@subhen我是用regedit做的,所以没有示例:P如果您有任何代码Spinet或相关文章,这可能会有所帮助please@subhen我是用regedit做的,所以没有例子:P也许这有帮助