c ++ - Udskiftning til SHDOCLC.DLL-fil for at tilpasse kontekstmenuen til en webbrowser

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger koden, fra denne artikel til at tilpasse kontekstmenuen til en webbrowser. [4]


men når jeg kører denne kode


HRESULT CBrowserHost::ShowContextMenu(DWORD dwID,
                                     POINT *ppt,
                                     IUnknown *pcmdTarget,
                                     IDispatch *pdispObject) 
{
   #define IDR\_BROWSE\_CONTEXT\_MENU  24641
   #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")); //here the exception is raised

   if (hinstSHDOCLC == NULL)
   {
       // Error loading module -- fail as securely as possible.
       return;
   }

   hMenu = LoadMenu(hinstSHDOCLC,
                    MAKEINTRESOURCE(IDR\_BROWSE\_CONTEXT\_MENU));

   hMenu = GetSubMenu(hMenu, dwID);

   // Get the language submenu.
   hr = spCT->Exec(&CGID\_ShellDocView, SHDVID\_GETMIMECSETMENU, 0, NULL, &var);

   mii.cbSize = sizeof(mii);
   mii.fMask  = MIIM\_SUBMENU;
   mii.hSubMenu = (HMENU) var.byref;

   // Add language submenu to Encoding context item.
   SetMenuItemInfo(hMenu, IDM\_LANGUAGE, FALSE, &mii);

   // Insert Shortcut Menu Extensions from registry.
   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);

   // Remove View Source.
   DeleteMenu(hMenu, IDM\_VIEWSOURCE, MF\_BYCOMMAND);

   // Show shortcut menu.
   int iSelection = ::TrackPopupMenu(hMenu,
                                     TPM\_LEFTALIGN | TPM\_RIGHTBUTTON | TPM\_RETURNCMD,
                                     ppt->x,
                                     ppt->y,
                                     0,
                                     hwnd,
                                     (RECT*)NULL);

   // Send selected shortcut menu item command to shell.
   LRESULT lr = ::SendMessage(hwnd, WM\_COMMAND, iSelection, NULL);

   FreeLibrary(hinstSHDOCLC);
   return S\_OK;
}


Denne fejl er hævet


"The specified module could not be found"


Jeg søger på mit system (Windows 7 x64, IE9), og jeg fandt ikke filen SHDOCLC.DLL. Der er spørgsmålet, at der er nogen erstatning for denne fil i newers-versionerne af IE, eller jeg skal bruge en anden måde til at indlæse kontekstmenuen og tilpasse det?

Bedste reference


Du bør ikke bruge eller stole på Internet Explorer's interne ressourcer længere. Som det fremgår af artiklen, har du påpeget:



  I Internet Explorer 7, teknikken til at overstyre kontekstmenuen
  fra en DocObject-vært er det samme som Internet Explorer 6; dog
  værten skal implementere sine egne menupunkter. De interne ressourcer af
  Internet Explorer bør ikke bruges, da de kan ændre eller flytte (som
  er blevet udført i Internet Explorer 7).


Andre referencer 1


Hvis Windows-versionen er nyere end VISTA (inkluderet), skal du prøve LoadLibrary ('IEFRAME.DLL') i stedet.


Og du kan finde mere information her [5]