コード例 #1
0
        private void cmAssembly_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip cms = sender as ContextMenuStrip;

            //nothing selected
            if (dgvData.SelectedRows.Count < 1)
            {
                for (int i = 0; i < cms.Items.Count; i++)
                {
                    cms.Items[i].Enabled = false;
                }
                return;
            }

            //common menus
            cms.Items["cmCopyInfo"].Enabled   = true;
            cms.Items["cmOpenFolder"].Enabled = true;
            cms.Items["cmDeleteFile"].Enabled = true;

            //checking selected rows
            bool oneSelected   = dgvData.SelectedRows.Count == 1;
            bool isAllExe      = true;
            bool isAllAssembly = true;
            bool hasNetModule  = false;

            for (int i = 0; i < dgvData.SelectedRows.Count; i++)
            {
                string fileName = PathUtils.GetFileName(dgvData.SelectedRows[i]);
                isAllExe      = isAllExe && PathUtils.IsExe(fileName);
                isAllAssembly = isAllAssembly && PathUtils.IsAssembly(fileName);
                hasNetModule  = hasNetModule || PathUtils.IsNetModule(fileName);
            }
            bool isAllIL = !isAllAssembly;

            //standard menus
            if (isAllAssembly)
            {
                cms.Items["cmDasm"].Enabled = true;
                if (hasNetModule)
                {
                    cms.Items["cmDeobf"].Enabled      = false;
                    cms.Items["cmVerify"].Enabled     = false;
                    cms.Items["cmStrongName"].Enabled = false;
                }
                else
                {
                    cms.Items["cmDeobf"].Enabled      = true;
                    cms.Items["cmVerify"].Enabled     = true;
                    cms.Items["cmStrongName"].Enabled = true;
                }
                cms.Items["cmClassEditor"].Enabled = true;  //disable this just because Reflector cannot load *same* assembly files
                if (oneSelected && !hasNetModule)
                {
                    cms.Items["cmRunMethod"].Enabled = true;
                }
                else
                {
                    cms.Items["cmRunMethod"].Enabled = false;
                }
            }
            else
            {
                cms.Items["cmDasm"].Enabled        = false;
                cms.Items["cmDeobf"].Enabled       = false;
                cms.Items["cmVerify"].Enabled      = false;
                cms.Items["cmStrongName"].Enabled  = false;
                cms.Items["cmClassEditor"].Enabled = false;
                cms.Items["cmRunMethod"].Enabled   = false;
            }

            if (isAllIL)
            {
                cms.Items["cmAsm"].Enabled = true;
            }
            else
            {
                cms.Items["cmAsm"].Enabled = false;
            }

            if (isAllExe && oneSelected)
            {
                cms.Items["cmProfiler"].Enabled = true;
            }
            else
            {
                cms.Items["cmProfiler"].Enabled = false;
            }

            foreach (ToolStripItem item in cms.Items)
            {
                ToolStripMenuItem mi = item as ToolStripMenuItem;
                if (mi == null || mi.Tag == null)
                {
                    continue;
                }
                IMainPlugin plugin = mi.Tag as IMainPlugin;
                if (plugin == null)
                {
                    continue;
                }

                MainPluginInfo pi = plugin.PluginInfo;
                if (pi.RowType == RowTypes.One && !oneSelected)
                {
                    mi.Enabled = false;
                }
                else
                {
                    if (pi.SourceType == SourceTypes.Any)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Assembly && isAllAssembly)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Executable && isAllExe)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.ILFile && isAllIL)
                    {
                        mi.Enabled = true;
                    }
                    else
                    {
                        mi.Enabled = false;
                    }
                }
            }

            e.Cancel = false;
        }