4

タイトルの通り。C# でのみこれを行う方法を知っていますが、WPF でこれを実行しようとすると、プログラムの起動時にファイル名を読み取るためにどこに何を追加すればよいかわかりません。

public static void Main(string[] args)
{
    if (Path.GetExtension(args[0]) == ".avi" || Path.GetExtension(args[0]) == ".mkv")
    {
        string pathOfFile = Path.GetFileNameWithoutExtension(args[0]);
        string fullPathOfFile = Path.GetFullPath(args[0]);
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1(pathOfFile, fullPathOfFile));
    }
    else
    {
        MessageBox.Show("This is not a supported file, please try again..");
    }
}
4

6 に答える 6

4

Found the solution. Thanks for your help :)

I'll post what I did if anyone else needs it ..

In App.xaml i added Startup="Application_Startup

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WpfApplication1.App"
    StartupUri="MainWindow.xaml"
    Startup="Application_Startup">
    <Application.Resources>
    <!-- Resources scoped at the Application level should be defined here. -->
    </Application.Resources>
</Application>

And in App.xaml.cs i added these lines:

    public static String[] mArgs;

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        if (e.Args.Length > 0)
        {
            mArgs = e.Args;
        }
    }

Last i had to add some information in the MainWindow class.

public MainWindow()
{
    this.InitializeComponent();
    String[] args = App.mArgs;
}

To get the data you want, you use System.IO.Path

Watch out for the Using statement. if you only use Ex. Path.GetFileNameWithoutExtension you will get a reference error. Use System.IO.Path when getting your data.

于 2010-07-14T06:50:04.997 に答える
2

いくつかのエントリ ポイント (メイン ウィンドウの OnLoad イベントなど) を見つけて、次のようにコマンド ライン引数にアクセスする必要があります。

string[] args = Environment.GetCommandLineArgs();
于 2010-07-12T17:52:03.010 に答える
1

トピックが古いことは知っていますが、似たようなものを探している人にとっては役立つかもしれません. 私は自分のプログラムにこの機能を追加しようとしていました (EXE の上にファイルをドロップしてプログラムを開始します)、解決策は非常に簡単で、ここから来ました。私のプログラムは、Excel ファイルのいくつかのセルをいじっていました。そのため、Excel ファイルをドロップするだけで、実行してそのようなことを行う必要があることは明らかでした。したがって、コンポーネントの初期化後にこれを Form コンストラクターに追加すると、問題なく動作します。

public Form1()
    {
        InitializeComponent();
        string[] args = Environment.GetCommandLineArgs();
        filePathTextBox.Text = (args.Length > 1 && (Path.GetExtension(args[1]) == ".xlsx" || 
            Path.GetExtension(args[1]) == ".xls")) ? args[1] : "";
    }

の最初の引数がプログラムのパスであることに気付いたargsので、テストしたところ、どうやら2番目の引数はexeにドロップするファイルのファイルパスであるため、args[1]. 間違っている場合は修正したいと思いますが、今のところ、プログラムはすべて正常に動作しています。

于 2016-11-06T14:22:41.267 に答える
1

ソリューション エクスプローラーで App.xaml ファイルをダブルクリックします。Startup イベントを追加できます。その e.Args プロパティを使用すると、コマンド ライン引数にアクセスできます。

于 2010-07-12T18:27:50.493 に答える
0

ファイルを Windows から EXE にドラッグ アンド ドロップすると、EXE が起動され、ファイル名がコマンド ライン引数として提供されます。

public MainWindow()
{
    string[] args = Environment.GetCommandLineArgs();
    foreach (var s in args)
    {
        //do something with s (the file name)
    }
}
于 2013-07-26T16:29:29.640 に答える