【问题标题】:Allow a custom file to double click and open my application while loading it's data [duplicate]允许自定义文件在加载数据时双击并打开我的应用程序[重复]
【发布时间】:2014-05-18 23:50:24
【问题描述】:

就像在 Windows 中进行引用时一样,要打开 .txt 文件,它可能会打开 NotePad.exe 和/或 Word.exe,同时将文件中的文本加载到编辑器中。如何使用我的桌面应用程序执行此操作。我有一个扩展名为 .mmi 的自定义文件类型。我想要它,这样当用户双击此文件类型时,它不仅会打开我的应用程序,而且会将其中的数据加载到我的应用程序的适当区域中。我了解如何为我的应用程序设置设置自定义文件类型,但我迷失的是如何获取触发打开我的应用程序的文件信息,以便从中获取数据。

例如。如果我打开一个 .html,并选择使用 notepad.exe,则该 html 现在会加载到新打开的文本编辑器中。

这适用于 From 应用程序,而不是控制台应用程序,它以具有 args 的 main 开头,以防有助于或改变任何东西。

下面的例子:

public partial class FormDashboard : Form
{
    public FormDashboard()
    {
        InitializeComponent();
    }

    private void FormDashboard_Load(object sender, EventArgs e)
    {


         //I want to get what file trigger the app to open here, and apply the data accordingly throurght the forms application.

    }

【问题讨论】:

  • 为什么投反对票。我还没有看到一个答案。我理解并一直使用控制台应用程序执行此操作,以及如何在表单应用程序中执行此操作。
  • 没有。我知道如何将文件扩展名关联到应用程序。我需要知道如何获取文件是双击打开我的应用程序,所以我可以阅读信息并在启动时应用它。我在控制台应用程序中完成了此操作,但在 Forms 应用程序中没有。
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 谢谢大家,如果重复了,我深表歉意。我一直在寻找控制台应用程序的答案,我一直在使用它并了解如何去做。我只是不知道如何能够对此进行测试和调试以查看其中包含的 toe Form_Load 事件。再次感谢大家。 :)

标签: c# .net desktop-application file-type


【解决方案1】:

对于 WinForms 应用程序和控制台应用程序,您的问题的答案没有什么不同。

触发您的应用的.mmi 文件的路径将是您应用的Main 方法中的args[0](假设签名为Main(string[] args))。

因此,在您告诉 Windows 使用您的应用打开 .mmi 文件之后,知道双击什么 .mmi 文件来触发您的应用程序基本上是免费的。

这是一个示例 - 我只是使用了一个文本文件 Test.mmi 和一个简单的控制台应用程序 ConsoleApplication1 进行 PoC:

/*
 * Program.cs
 */

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                // Open and display the text in the double-clicked .mmi file.
                Console.WriteLine(File.ReadAllText(args[0]));
            }

            // Pause for 5 seconds to see the double-clicked file's text.
            Thread.Sleep(5000);
        }
    }
}

告诉 Windows 用ConsoleApplication1.exe 打开.mmi 文件后,当我双击ConsoleApplication1.exe 时,它会在Test.mmi (Whatever....) 中显示文本:

与我提供的 PoC 唯一不同的是,您需要对作为 args[0] 的文件路径执行任何操作。

【讨论】:

  • 我不知道我将被客户端用户关联,但我希望该文件中的数据能够通过应用程序进行处理。例如,如果它是一个带有一些额外 delim 字段的 html 文件,我想将 html 加载到文本区域中,并将 delim 文件中的数据填充到需要它们的文件中。
  • @Casey:既然你问如何获取被双击触发你的应用的文件,那就是答案的重点。您的应用对双击的文件所做的操作完全是另一回事……应根据需要明确解决(即,如有必要,请提出另一个问题)。
  • 对我来说,我必须将其设置为“args[1]”而不是“args[0]”。从stackoverflow.com/a/18448925/3472690 中的docesam 评论中发现了这一点
【解决方案2】:

文件名将作为第一个命令行参数传递给您的应用程序。您可以使用以下代码访问它:

static void Main(string[] args)
{
    if (args.Length > 0)
    {
        //do stuff with args[0]
    }
}

或者,如果您在 WPF 中,则处理 Application.Startup 事件并从 e.Args 获取参数。

【讨论】:

  • 这不只适用于控制台应用程序,因为表单应用程序加载将具有仅执行 initilization() 的 Form() 构造函数?
  • 当我评论另一个答案时,请在您的项目中查找 Program.cs。您的带 args 的 Main 方法应该在那里。
  • 哦。我明白你的意思了。我以为我错过了这个问题。这就是我所迷失的。谢谢男人/女人。非常感谢。
  • 谢谢。我只是误解了这个概念。再次感谢 Vesan。
  • 伙计,我是个白痴。我认为这将是表单加载,而不是 program.cs...大声笑再次感谢
【解决方案3】:

我认为您只需要阅读命令行参数即可。要打开的文件应该是您的唯一参数。

 class MyClass
    {
    static void Main(string[] args)

    {
         // args[0] = file name to be opened by your application

【讨论】:

  • 我了解使用 main(string[] args) 的控制台应用程序会如何,但在表单应用程序中呢?我似乎无法从 Form() 或 Form_Load(Object sender, EventArgs e) 方法中获取文件信息。
  • 如果您使用的是 Windows 窗体,则完全相同。查看 Program.cs,您的 Main 方法应该在那里。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多