2016-07-15 42 views
0

我不得不使用該因素未決可能需要交替變化的一些文件。正確的文件的選擇開始於標準的Windows目錄C:\圖紙在我的情況,所以我知道,我們可以將項目添加到Windows backbround上下文菜單如下:窗口下拉菜單通文件名vb.net程序

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\txtfile\shell\mymenu] 
@="test123" 

[HKEY_CLASSES_ROOT\txtfile\shell\mymenu\command] 
@="%SystemRoot%\\system32\\NOTEPAD.EXE %1" 

但是(甚至林不知道如果這是可能的),我想獲取文件的名稱,並在我的vb.net應用程序中使用它,例如顯示文件名的文本框。

劑量任何人知道,如果我能做到這一點?如何?

+0

你問如何訪問你的應用程序中的「%1」?這些被稱爲CommandLineArguments – Plutonix

+0

其實我不太確定註冊表主題,但據我瞭解,%1返回文件名?如果我可以在我的vb中重複使用這個名字,那將會很棒。 net應用程序 – TM80

+0

Explorer將文件名作爲命令行參數傳遞給您的應用程序。有多種方法可以獲得它們 – Plutonix

回答

1

首先,你必須得到命令行參數,可以在幾個不同的方式來完成,但我更喜歡使用Environment.GetCommandLineArgs()

Dim Arguments() As String = Environment.GetCommandLineArgs() 

然後,你必須檢查,實際上有閱讀的爭論。非常的第一個參數(索引0)是總是路徑到您的應用程序,因此,我們必須檢查它至少包含參數,以確保有一個也傳遞給你的應用程序。

If Arguments.Length >= 2 Then 

最後,你剛纔得到的路徑,從第二個參數的文件,並調用該IO.Path.GetFileName()

Dim FilePath As String = Arguments(1) 'Second argument has index 1. 
Dim FileName As String = IO.Path.GetFileName(FilePath) 

如果你不希望在所有的文件的路徑,你可以先走一步做:

Dim FileName As String = IO.Path.GetFileName(Arguments(1)) 

全碼:

Dim Arguments() As String = Environment.GetCommandLineArgs() 

If Arguments.Length >= 2 Then 
    Dim FilePath As String = Arguments(1) 'Second argument has index 1. 
    Dim FileName As String = IO.Path.GetFileName(FilePath) 

    'Do your stuff here. 
End If 
+1

還有'My.Application.CommandLineArgs'不包括EXE路徑(0),NET方法都這樣做,但我認爲所有的VB版本忽略它 – Plutonix

+0

@Plutonix:。這是一個出路很多:)。我喜歡VB.NET語言,但我更喜歡不使用它的自定義類/屬性/方法。出於某種原因,我更喜歡通用.NET的東西。 –

+1

我也是。我的意思是,你強調的元素0是路徑,是不是所有的VB方法的情況下 – Plutonix