public void InvokeDefault(int x, int y)
        {
            Create();
            int defaultCommand = RUser32.GetMenuDefaultItem(_menuHandle, false, 0);

            if (defaultCommand != -1)
            {
                SCmInvokeCommandInfoEX invoke = new SCmInvokeCommandInfoEX();
                invoke.cbSize      = Marshal.SizeOf(typeof(SCmInvokeCommandInfoEX));
                invoke.lpVerb      = (IntPtr)(defaultCommand - RWinShell.CMD_FIRST);
                invoke.lpDirectory = string.Empty;
                invoke.fMask       = 0;
                invoke.ptInvoke    = new SPoint();
                invoke.ptInvoke.x  = x;
                invoke.ptInvoke.y  = y;
                invoke.nShow       = 1;
                _face.InvokeCommand(ref invoke);
            }
        }
        public int Popup(IntPtr handle, int x, int y)
        {
            Create();
            uint cmd = RUser32.TrackPopupMenuEx(_menuHandle, ETrackPopupMenu.RETURNCMD, x, y, handle, IntPtr.Zero);

            _menuHandle = IntPtr.Zero;
            if (cmd >= RWinShell.CMD_FIRST)
            {
                SCmInvokeCommandInfoEX invoke = new SCmInvokeCommandInfoEX();
                invoke.cbSize      = Marshal.SizeOf(typeof(SCmInvokeCommandInfoEX));
                invoke.lpVerb      = (IntPtr)(cmd - 1);
                invoke.lpDirectory = string.Empty;
                invoke.fMask       = 0;
                invoke.ptInvoke    = new SPoint();
                invoke.ptInvoke.x  = x;
                invoke.ptInvoke.y  = y;
                invoke.nShow       = 1;
                _face.InvokeCommand(ref invoke);
            }
            return((int)cmd);
        }