(VB.NET)(VB2003)OpenFileDialogクラスは、.Net Framework1.0ではDereferenceLinksプロパティが効かず、.lnkファイルを選択してもリンク先には飛ばず、.lnkファイル自体が選択されてしまうようです。.Net Framework1.0でも.lnkファイルを選択したときにリンク先に飛ぶようにするコードがありましたら教えてください。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/09 12:33:08
  • 終了:2010/04/11 17:32:54

回答(2件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862010/04/09 12:53:10

ポイント80pt

WSHを利用すればlnkファイルのパスが拾えるようです。


だりそうソフトのガラクタ製作所2.0

ショートカットを読み込む、書き込む

↑を逆にすればいいのでは、と。

TextBox1.Text= .targetpath とかにしたら読み込むことができた。

id:Ryo9508

WSHをよく知らないのですが勉強してみます。

2010/04/09 18:11:45
id:rsc96074 No.2

rsc回答回数4399ベストアンサー獲得回数4032010/04/09 16:43:58

ポイント50pt

 OpenFileDialogは、VB2003に限らず、VB2008でもファイル名しか取得できません。ファイル名を取得した後、Process.Startで飛ばすのはどうでしょうか。フォームにポタンを1つ設置して、下記サンプルプログラムで飛べるようです。

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim strFileName As String = ""

        OpenFileDialog1.Filter = "lnkファイル(*.lnk)|*.lnk"
        If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            strFileName = OpenFileDialog1.FileName
            Process.Start(strFileName)
        End If
    End Sub
End Class
id:Ryo9508

すいません。自分でやりたいことが自分でわかっていませんでした。このショートカットというのは「フォルダへのショートカット」でして。やりたいことは「フォルダのショートカット」が指すフォルダに飛んで、その場所でのOpenFileDialog.ShowDialog()のダイアログを再帰的に開く。ということでした。

2010/04/09 18:36:09
  • id:Ryo9508
    自己レスです。
    VB2003の環境が会社に行かないと無いので断定できませんが、下記のコードで出来そうです。
    (警告が一個出るけど)

    ''' <summary>
    ''' ファイルを選択するダイアログを表示してファイル名を返す関数
    ''' </summary>
    ''' <param name="di"></param>
    ''' <remarks>
    ''' 選択したファイルの拡張子がショートカットリンク".lnk"の場合は
    ''' ショートカットの指すフォルダに飛んで再びダイアログを表示
    ''' (再帰呼び出し)
    ''' </remarks>
    Friend Function GetSelectedFileName(ByVal di As String) As String

    Dim ofile As OpenFileDialog
    Dim filename As String

    ofile = New OpenFileDialog()
    ofile.InitialDirectory = di

    'ofile.DereferenceLinks = True 'ショートカットリンクを指定したときはその先に飛ばす(VB2008では指定しなくてもなるのだが)
    If ofile.ShowDialog() = DialogResult.OK Then
    If Right(ofile.FileName, 4) = ".lnk" Then
    Dim WshShell = CreateObject("WScript.Shell")
    Dim oShellLink = WshShell.CreateShortcut(ofile.FileName)
    MsgBox(oShellLink.TargetPath)
    filename = GetSelectedFileName(oShellLink.TargetPath)
    Else
    filename = ofile.FileName
    End If
    End If

    Return filename

    End Function

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません