DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コマンドライン引数のパスが変

環境/言語:[XPhome,VB.NET,Framework1.0]
分類:[.NET]

2004/04/24(Sat) 18:00:21 編集(投稿者)
2004/04/24(Sat) 17:59:41 編集(投稿者)



こんにちは。VB.netで、エディタを作っています。

エクスプローラなどから、aaaファイル(拡張子を勝手に作りました。)をクリックすると、
エディタが起動して、コマンドライン引数を利用してパスを取得するようにしています。

ただ、動作自体には問題がないのですが、ファイル名に変な文字がつきます。
(たぶんMS-DOSファイル名?みたいです。)

例:テキストファイル.aaa(Aとします) が テキス~1.AAA(Bとします) になる。

ここで質問なのは、どうすれば変わらないですむか。(もしくは、BからAを取得するか)です。
また、なぜ拡張子が勝手に大文字になるんでしょうか?

一応、レジストリの関連付けの状況を書いておきます。

HKEY_CLASSES_ROOT
├aaa(「既定」キーに「aaaファイル」を格納)
│└shell
│   └open(「既定」キーに「aaaファイルを開く」を格納」)
│     └command(既定」キーに「C:\○○○\edita.exe %1」を格納)
└.aaa(「既定」キーに「aaa」を格納)
  
> 例:テキストファイル.aaa(Aとします) が テキス~1.AAA(Bとします) になる。
>
> ここで質問なのは、どうすれば変わらないですむか。(もしくは、BからAを取得するか)です。
> また、なぜ拡張子が勝手に大文字になるんでしょうか?
詳しく調べてないのでなんとも・・・^^;

とりあえずショートファイル名からロングファイル名の取得とその逆のサンプル付けときますのでご参考までに。

'
Imports System
Imports System.Runtime.InteropServices

'
<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function GetShortPathName( _
<MarshalAs(UnmanagedType.LPTStr)> _
ByVal path As String, _
<MarshalAs(UnmanagedType.LPTStr)> _
ByVal shortPath As System.Text.StringBuilder, _
ByVal shortPathLength As Integer) As Integer
End Function

<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function GetLongPathName( _
<MarshalAs(UnmanagedType.LPTStr)> _
ByVal path As String, _
<MarshalAs(UnmanagedType.LPTStr)> _
ByVal longPath As System.Text.StringBuilder, _
ByVal longPathLength As Integer) As Integer
End Function

'ShortFileName → LongFileName
Private Function GetLongFileName_(ByVal ShortFileName As String) As String

Dim LongPath As New System.Text.StringBuilder(80)

Dim ret As Integer = GetLongPathName(ShortFileName, LongPath, LongPath.Capacity)

Return LongPath.ToString()

End Function

'LongFileName → ShortFileName
Private Function GetShortFileName_(ByVal LongFileName As String) As String

Dim ShortPath As New System.Text.StringBuilder(80)

Dim ret As Integer = GetShortPathName(LongFileName, ShortPath, ShortPath.Capacity)

Return ShortPath.ToString()

End Function
2004/05/02(Sun) 09:07:28 編集(投稿者)

■No3837に返信(sasさんの記事)
ありがとうございました。

でもやっぱり、何ででしょうね?
Windowsってそういう仕組みなんでしょうかね?
(たぶんそうじゃない気がします。)
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板