1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Windows Shell Context Menu

Discussion in 'Shell Script' started by 95ulisse, Mar 28, 2010.

  1. 95ulisse

    95ulisse New Member

    Mar 28, 2010
    Likes Received:
    Trophy Points:
    Hello everyone,
    I'm new to the forum and this is only my second post, so I apologize in advance for any mistakes.

    This is my situation:
    I'm using Microsoft Visual Studio 2008 with .Net Framework 3.5.
    I'm developing an extension of the Windows Shell Context menu, and I did it, but I have a problem:
    when my menu is invoked on the links (*.lnk), it doesn't work and prevents the upper voices.
    This only occurs on Vista and Seven, not on XP.
    This is the IContextMenu.QueryContextMenu:

    int IContextMenu.QueryContextMenu(uint hmenu,
                  uint iMenu,
                  int idCmdFirst,
                  int idCmdLast,
                  uint uFlags)
                    //Clicked file
                    StringBuilder sb = new StringBuilder(1024);
                    DllImports.DragQueryFile(m_hDrop, 0, sb, sb.Capacity + 1);
                    //If it's a link (*.lnk) exits
                    //Maybe the mistake is here, but I don't know!
                    if (new FileInfo(sb.ToString()).Extension == ".lnk") { return 1; }
                    // Adds the menus
                    for (int i = 0; i < Menus.Length; i++)
                        //Updates the ID
                        Menus[i].MenuItemInfo.wID += idCmdFirst;
                        //Verifies if the menu has some submenus
                        if (Menus[i].SubMenu != null) { PopolateSubMenu(Menus[i], idCmdFirst); }
                        //Adds the menu
                        DllImports.InsertMenuItem(hmenu, Menus[i].Position - 1, 1, ref Menus[i].MenuItemInfo);
                        //Adds the icon
                        if (Menus[i].Image != null) {
                            System.Drawing.Bitmap Bmp = Menus[i].Image;
                            DllImports.SetMenuItemBitmaps((IntPtr)hmenu, (IntPtr)(Menus[i].Position - 1), 0x400, Bmp.GetHbitmap(), Bmp.GetHbitmap());
                    // Returns the number of added menu item
                    return (int)(NumeroMenu + 1);
    I don't know what to do!
    Please help me!

    Thank you in advance for your help!

    PS: I apologize for my bad English, too: I'm Italian!

Share This Page