【问题标题】:C# Add custom Windows context menu for just this programC# 仅为此程序添加自定义 Windows 上下文菜单
【发布时间】:2018-10-24 13:03:26
【问题描述】:

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

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


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


注意事项

  • 我曾尝试过在开始时按住一个键,但何时按下该键可能会很模糊。太早了——你最终会在活动窗口中多次输入“r”,太晚了——它会错过捕获点。
  • 我还研究过启动器上有一个按钮,可以让您选择进入开发模式,但启动器只打开大约一秒钟,因此很容易错过。

提前致谢

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

【问题讨论】:

  • @Anas 我已将问题的第一行修改得更准确。谢谢
  • 感谢@stuartd,这真是太好了!我会试一试的。

标签: c# windows contextmenu


【解决方案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

【讨论】:

  • 感谢您的建议,这里唯一的问题是我必须为同一件事设置两个快捷方式。因此,我还不如坚持使用这两个应用程序。
  • 我明白你的意思。如果在完成启动器流程后等待几秒钟,如果有输入(可能是任何输入或特定字母)进入开发者模式,该怎么办
  • 可惜启动器本身的流程是打开一个数据库的副本。这意味着如果我等到最后,我将最终打开数据库并进入开发者模式。我刚刚想到让自己成为一个在后台运行的服务,因为我知道我可以在其中添加一个上下文菜单
  • 如果你有兴趣...我想出了这个stackoverflow.com/a/55341608/7985048的答案
【解决方案2】:

除此之外,我偶然发现了一些代码来完成这项工作。希望这将有助于将来的某人。我在 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>

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

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();
} 

【讨论】:

    【解决方案3】:

    根据评论中的建议,由于某种原因,这已经消失了。我将恢复为按键,但使用 shift 或“R”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多