gpt4 book ai didi

c++ - Winapi shell 扩展覆盖 Windows 命令

转载 作者:可可西里 更新时间:2023-11-01 11:35:46 25 4
gpt4 key购买 nike

<分区>

我为我正在开发的一个小应用程序开发了一个非常基本的 shell 扩展。我已经使用它一段时间了,没有任何问题,但我只是注意到在 Windows xp 中,在开始菜单 -> 所有程序中,如果我右键单击那里的一个文件夹并选择“打开”或“探索”,我的小应用程序出现而不是资源管理器窗口。你可以想象,当我看到这一幕时,我是多么的高兴和自豪。我觉得这很奇怪,因为这是唯一发生这种情况的地方(到目前为止......)。我在“目录”注册表项下注册了 shell 扩展,因此它仅在右键单击文件夹时显示。

我找到了一些关于 shell 扩展的好文章,到目前为止我已经完成了这些,但是我在这个 winapi 的东西上离我的舒适区还差得很远。我对 id 做了很多摆弄,但我无法弄清楚问题是什么。

这是我的 querycontextmenu 实现,我希望我犯了一个愚蠢的错误,c++ 大师可以立即发现。任何帮助将不胜感激。

STDMETHODIMP ShellExtension::QueryContextMenu(HMENU hMenu,  UINT indexMenu,  UINT idCmdFirst,  UINT idCmdLast, UINT uFlags){
if (CMF_DEFAULTONLY & uFlags)
{
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);
}

UINT uID = idCmdFirst;

if (!InsertMenu(hMenu, indexMenu, MF_SEPARATOR | MF_BYPOSITION, 0, NULL))
{
return HRESULT_FROM_WIN32(GetLastError());
}

HMENU hSubmenu = CreatePopupMenu();

InsertMenu (hSubmenu, 0, MF_BYPOSITION, uID++, (this->isFrench ? SET_REF_TEXT : SET_REF_TEXT_EN));
InsertMenu (hSubmenu, 1, MF_BYPOSITION, uID++, (this->isFrench ? SET_COMP_TEXT : SET_COMP_TEXT_EN));

MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_BITMAP | MIIM_SUBMENU | MIIM_DATA | MIIM_STRING;
mii.hSubMenu = hSubmenu;
mii.fType = MFT_STRING;
mii.dwTypeData = (this->isFrench ? MAIN_TEXT : MAIN_TEXT_EN);
mii.hbmpItem = IsRequirePainting() ? HBMMENU_CALLBACK : m_hMenuBmp;
mii.wID = uID++;

if (!InsertMenuItem(hMenu, indexMenu, TRUE, &mii))
{
return HRESULT_FROM_WIN32(GetLastError());
}

if (!InsertMenu(hMenu, indexMenu, MF_SEPARATOR | MF_BYPOSITION, 0, NULL))
{
return HRESULT_FROM_WIN32(GetLastError());
}

return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, uID - idCmdFirst);}

谢谢!

编辑:

这是对我有用的解决方案......对于任何在这里绊倒的人:

STDMETHODIMP ShellExtension::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
{
if (!HIWORD(lpcmi->lpVerb))
{
UINT idCmd = LOWORD(lpcmi->lpVerb);

switch (idCmd)
{
case 0:
doStuffForFirstCommand();
break;
case 1:
doStuffForSecondCommand();
break;
}

return S_OK;
}
else
{
return E_INVALIDARG; //this is what I forgot...
}
}

感谢您的帮助,对代码缩进感到抱歉,好像我无法弄清楚代码标签。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com