如何创建出现在特定文件夹内的文件/文件夹的上下文菜单。
说有一个目录“D:\ RandomCodes”
如何创建一个自定义上下文菜单项“在MyApp中打开”任何文件/文件夹在里面?这个菜单项不应该出现在任何其他目录中。我知道如果我在HKCR/Directory/Shell中添加条目,它会起作用,但是它随时会出现在所有文件和文件夹中。请通过这个指导我。为特定文件夹创建窗口右键单击上下文菜单
4
A
回答
3
可能对矫正你的代码IShellExtInit:
STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pidl,LPDATAOBJECT pDataObj,HKEY hk)
{
// Initialize can be called more than once
// If Initialize has already been called, release the old
// IDataObject pointer.
if (m_pDataObj)
{
m_pDataObj->Release();
}
// If a data object pointer was passed in, save it and
// extract the file name.
if (pDataObj == NULL)
return E_INVALIDARG;
m_pDataObj = pDataObj;
pDataObj->AddRef();
STGMEDIUM medium;
FORMATETC fe = {CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
UINT uCount;
HRESULT hr = pDataObj->GetData(&fe, &medium);
if (FAILED(hr))
return E_INVALIDARG;
// save the file name
if (DragQueryFile((HDROP) medium.hGlobal, 0xFFFFFFFF, NULL, 0)==1)
{
DragQueryFile((HDROP) medium.hGlobal, 0, m_szFile,
sizeof(m_szFile));
if (lstrcmpi(m_szFile, "D:\\RandomCodes") == 0)
{
hr = NOERROR;
}
else
hr = E_INVALIDARG;
}
else
hr = E_INVALIDARG;
ReleaseStgMedium(&medium);
return hr;
}
5
例如:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\NetBeans]
"AppliesTo"="System.ItemPathDisplay:\"NetBeansProjects\""
@="Open with NetBeans"
[HKEY_CLASSES_ROOT\Folder\shell\NetBeans\command]
@="\"C:\\Program Files\\NetBeans 7.2.1\\bin\\netbeans64.exe\" --open \"%1\""
更多的信息在这里:
http://msdn.microsoft.com/en-us/library/cc144171%28VS.85%29.aspx
3
我知道这是一个很老的问题,但对于未来遇到此问题的任何人,我发现最简单的方法是将字符串值添加到名为“AppliesTo”的键并将其值设置为“under:{path}”
在我的示例中,我希望它只能在T驱动器中查找,所以我的字符串值是“适用于”:“下:T:”。
RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");
RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");
subNewkey.Close();
newkey.Close();
_key.Close();
相关问题
- 1. Chrome右键单击上下文菜单
- 2. 右键单击上下文菜单jquery
- 3. Xpages右键单击上下文菜单
- 4. 右键单击上下文菜单
- 5. JQuery右键单击上下文菜单
- 6. 如何为WPF中的按钮创建右键单击上下文菜单
- 7. 创建菜单项的弹出窗口(或上下文)菜单
- 8. 单击创建上下文菜单
- 9. Excel 2010形状自定义右键单击上下文菜单
- 10. 如何在列表框上右键单击创建上下文菜单?
- 11. jQuery右键单击上下文菜单插件
- 12. VSTO(文档级):Excel中的单个上下文菜单(右键单击菜单)
- 13. 如何在窗口的上下文菜单中恢复“创建新文件夹...”
- 14. 覆盖站点特定的JavaScript右键单击上下文菜单
- 15. 仅在特定GridViewColumn中右键单击时显示上下文菜单
- 16. 如何在消息右键单击中创建Outlook 2007上下文菜单?
- 17. 禁止在画布上右键单击上下文菜单
- 18. 在按钮上的Extjs上下文菜单(右键单击)
- 19. 如何在DataGridView上使用右键单击上下文菜单?
- 20. Opera,自定义上下文菜单,选择右键点击
- 21. wpf上下文菜单左键单击
- 22. 上下文菜单左键单击Qt
- 23. 上下文菜单左键单击
- 24. 上下文菜单与每个右键单击vb.net
- 25. 如何在WPF中右键单击按钮上下文菜单?
- 26. 添加右键单击上下文菜单仅在台式机
- 27. 如何在Silverlight中设置右键单击上下文菜单?
- 28. Intellij右键单击Ubuntu中的上下文菜单问题
- 29. 禁用Firefox的傻右键单击上下文菜单
- 30. Windows 7 - 右键单击Python的上下文级联菜单
类似的问题::http://stackoverflow.com/questions/9064272/contextual-menu-to-a-specific-folder – Xearinox
嘿感谢
在C#中,这是很容易用下面的完成!我实际上只是在做类似的事情!基本上我不想写一个shell扩展。我想通过仅管理注册表值来实现这一点。例如在Directory/Shellex下设置键可以为所有目录提供菜单项。我想为特定的目录做同样的事情,但这似乎不可能。只会这样做!谢谢! –