C#仅为此程序添加自定义Windows上下文菜单

时间:2018-10-24 13:03:27

标签: c# windows contextmenu

我的问题是:如何为特定应用程序而非全局添加Windows上下文菜单项?

快速摘要: 我们将Access(gro吟)用于我们的CRM系统。我们使用基本的“复制到本地”过程进行多次访问。我编写了一个C.“启动器”,它比.bat文件要好得多(单击启动器,启动器下载数据库,启动数据库并退出)。我目前还使用C#控制台应用程序来处理开发,自动执行诸如增加版本号,移动文件等操作。


我的问题/目标: 我想将这两个程序合而为一,但是我不想通过刺激用户询问他们是否要开发来阻止启动器的主要用途。我也使用这个启动器,因为我主要是一个估算者,因此想将两者结合起来。我已经读过您可以整体上将上下文菜单项添加到Windows,但是我希望能够为此应用程序在上下文菜单 just 中添加启动选项。即,右键点击程序,使用正常的菜单选项,但添加“开发模式”,这会打开程序,并带有可用于打开开发窗口/控制台的参数。


注意事项

  • 我在开始时一直按住一个键,但是何时按下键可能比较模糊。太早了-您最终将在活动窗口中多次键入“ r”,为时太晚-它将错过捕获点。
  • 我还查看了启动器上的按钮,该按钮为您提供了进入开发模式的选项,但是启动器仅打开约一秒钟,因此非常容易错过。

预先感谢

编辑:启动器已制作并作为一次单击应用程序运行。

3 个答案:

答案 0 :(得分:1)

据我所知上下文可以与扩展一起使用,我真的不知道是否有可能为特定程序提供自定义上下文。话虽如此,我认为有更好的方法来解决您的问题。看看这个

    static void Main(string[] args)
    {
        /* here normal flow of the launcher*/

        if (args[0] == "-dev")
        {
            /*here de developer mode*/
            Console.WriteLine("Developer mode activated");
        }
    }

使用它的方法很简单,您可以创建一个快捷方式,并在快捷方式目标上显示以下内容:“ C:\ Users **** \ Documents \ visual studio 2017 \ Projects \ Test \ Test \ bin \ Debug \ Test.exe”,则应将其更改为“ C:\ Users **** \ Documents \ visual studio 2017 \ Projects \ Test \ Test \ bin \ Debug \ Test.exe” -dev

答案 1 :(得分:0)

根据评论中的建议,该请求由于某种原因而消失了。我将还原为按键,但使用shift键或“ R”键。

如果失败,或者如果导致问题,它将为所有程序创建一个全局上下文菜单项,并且在不需要时不会单击它

答案 2 :(得分:0)

此外,我偶然发现了一些代码来完成这项工作。希望这会在将来对某人有所帮助。我正在WPF中执行此操作,但是我确信您可以修改此代码以在其他地方使用。

1)App.xaml-添加JumpList操作

在Application.Resources属性之后(不在内部)添加以下内容,然后更改您的喜好(出于开发的原因,我没有使用很多属性,请查看链接以了解更多信息):

<Application.Resources>
...
</Application.Resources>
<JumpList.JumpList>
    <JumpList ShowRecentCategory="False"
              ShowFrequentCategory="False">
        <JumpTask Title="Open Dev Mode" 
                  Description="Use this to enter dev mode (admins only)"
                  Arguments="DevMode:true"/>
    </JumpList>
</JumpList.JumpList>

这将在跳转列表中创建一个“任务”:

enter image description here

2)创建全局静态类-这将使您可以存储变量以供以后以其他形式使用。

public static class Global
{
    public static Boolean DevMode = false;
}

3)App.xaml.cs-添加OnStartup处理程序

在App类内部,为OnStartup创建替代方法

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        Global.DevMode = Boolean.Parse(e.Args.FirstOrDefault().ToString().Split(':')[1]);
    }
}

4)使用Global.DevMode读取表单中的变量

private void Window_ContentRendered(object sender, EventArgs e)
{
    if (Global.DevMode) RunYourDevScript();
}