我有这样的代码,以便所有带有“.whatever”扩展名的文件随我的程序打开:
If Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(".whatever\shell\open\command", True) Is Nothing Then
Dim icotouse As String = Path.GetTempPath() & "\whatever.ico"
My.Computer.Registry.ClassesRoot.CreateSubKey(".whatever").SetValue("", "whatever", Microsoft.Win32.RegistryValueKind.String)
My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\shell\open\command").SetValue("", Application.ExecutablePath, Microsoft.Win32.RegistryValueKind.String)
My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\DefaultIcon").SetValue("", icotouse)
End If
现在,当用户双击“.whatever”文件时,它将在我的程序中打开。
当我在程序中打开它时,如何获取“.whatever”文件所在的目录?例如,用户单击其桌面上的文件[C:\ Users \ Example \ Desktop \ file.whatever],当他们单击它时,它会在我的程序中打开,我可以为该目录分配一个变量名吗?
答案 0 :(得分:1)
首先,您需要让Windows将文件的路径传递给您的程序。这是通过将%1
添加到command
密钥的默认值来完成的。
将创建command
密钥的代码更改为:
My.Computer.Registry.ClassesRoot.CreateSubKey("whatever\shell\open\command").SetValue("", Application.ExecutablePath & " %1", Microsoft.Win32.RegistryValueKind.String)
其次,要获取发送到您的程序的文件的路径,您可以使用例如Environment.GetCommandLineArgs()
。
将此放在Form_Load
事件中的某处:
Dim Arguments() As String = Environment.GetCommandLineArgs()
If Arguments.Length > 1 Then 'If there's more than one argument, it means that something (like a file) was passed to your application.
End If
现在,If
- 语句检查参数是否已发送到您的应用程序。要获取文件的路径,您只需将其中的内容放入其中:
Dim FilePath As String = Arguments(1)
'Will give you for example: C:\Users\Example\Desktop\file.whatever
但是如果你想获取文件的目录,可以执行以下操作:
Dim FileDirectory As String = IO.Path.GetDirectoryName(FilePath)
'Will give you for example: C:\Users\Example\Desktop
答案 1 :(得分:0)
您需要获取命令行参数
你可以用这样的东西做到这一点
Dim arguments As String() = Environment.GetCommandLineArgs()
Console.WriteLine("GetCommandLineArgs: {0}", String.Join(", ", arguments))
您也可以查看此MSDN链接
https://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs(v=vs.110).aspx