我参考网络写一个改IE右键菜单的程序,可是取编码的子菜单,取不出来,估计问题在下面几条,我对VC不熟,请各位高手指点
    //获得语言子菜单    hr = spCT->Exec(&CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, NULL, &var);    mii.cbSize = sizeof(mii);    mii.fMask = MIIM_SUBMENU;    mii.hSubMenu = (HMENU) var.byref;    //加入语言子菜单到编码上下文菜单    SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, &mii);这几个语句转为delphi语句该怎么写呀。

解决方案 »

  1.   

    spCT,mii这是什么类型,你最好把全部要转得都贴出来
      

  2.   

    HRESULT CBrowserHost::ShowContextMenu(DWORD dwID,    POINT *ppt,    IUnknown *pcmdTarget,    IDispatch *pdispObject) {    #define IDR_BROWSE_CONTEXT_MENU 24641    #define IDR_FORM_CONTEXT_MENU 24640    #define SHDVID_GETMIMECSETMENU 27    #define SHDVID_ADDMENUEXTENSIONS 53    HRESULT hr;    HINSTANCE hinstSHDOCLC;    HWND hwnd;    HMENU hMenu;    CComPtr<IOleCommandTarget> spCT;    CComPtr<IOleWindow> spWnd;    MENUITEMINFO mii={0};    CComVariant var, var1, var2;    hr = pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void**)&spCT);    hr = pcmdTarget->QueryInterface(IID_IOleWindow, (void**)&spWnd);    hr = spWnd->GetWindow(&hwnd);    hinstSHDOCLC = LoadLibrary(TEXT("SHDOCLC.DLL"));
        if (hinstSHDOCLC == NULL)    {        // 载入模块错误 -- 尽可能安全地失败        return;    }    hMenu=LoadMenu(hinstSHDOCLC,        MAKEINTRESOURCE(IDR_BROWSE_CONTEXT_MENU));    hMenu=GetSubMenu(hMenu,dwID);    //获得语言子菜单    hr = spCT->Exec(&CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, NULL, &var);    mii.cbSize = sizeof(mii);    mii.fMask = MIIM_SUBMENU;    mii.hSubMenu = (HMENU) var.byref;    //加入语言子菜单到编码上下文菜单    SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, &mii);    //插入来自注册表的快捷菜单扩展    V_VT(&var1) = VT_INT_PTR;    V_BYREF(&var1) = hMenu;    V_VT(&var2) = VT_I4;    V_I4(&var2) = dwID;    hr = spCT->Exec(&CGID_ShellDocView, SHDVID_ADDMENUEXTENSIONS, 0, &var1, &var2);    //删除查看源代码    DeleteMenu(hMenu, IDM_VIEWSOURCE, MF_BYCOMMAND);    //显示快捷菜单    int iSelection = ::TrackPopupMenu(hMenu,        TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD,        ppt->x,        ppt->y,        0,        hwnd,        (RECT*)NULL);    //发送选定的快捷菜单项目指令到外壳    LRESULT lr = ::SendMessage(hwnd, WM_COMMAND, iSelection, NULL);    FreeLibrary(hinstSHDOCLC);    return S_OK;}
      

  3.   

      hr := spCT.Exec(@CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, nil, @var);  mii.cbSize := sizeof(mii);  mii.fMask := MIIM_SUBMENU;  mii.hSubMenu := HMENU(var.byref);  //加入语言子菜单到编码上下文菜单  SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, @mii);
    大概就是这样了,改右键菜单的好像有delphi的代码呀,可以在网上再找找。
    我家里电脑上好像有,找到的话贴给你。
      

  4.   

    yqfsan  你好
    我按你说的试了一下:
    hr := spCT.Exec(@CGID_ShellDocView, SHDVID_GETMIMECSETMENU, 0, nil, @var);
      SetMenuItemInfo(hMenu, IDM_LANGUAGE, FALSE, @mii);
    这二句里的@var,@mii编译提示错误
    我把@去了,不报错;运行后IE错误,可能是这一句的问题:
    mii.hSubMenu := HMENU(var.byref);能给帮忙看看是怎么回事吗?谢谢了.
    我在网上没有找到关于DELPHI的文章,如果你有,麻烦你能发一份给我:shwei#21cn.com
      

  5.   

    to delphi99
    记错了,我这里有的是加IE菜单的,能加主菜单和右键菜单,也挺老的版本,delphi5的,不过也发给你参考。是“Delphi深度探索”的例程。