テキストファイルを右クリックの「アプリケーションから開く」で私の作ったメモ帳で開くと、ちゃんと開けません。(文字が表示されない)
どうすればいいのでしょう?
ええー、MSDNをくまなく見ないとわからないので見つけづらいですよね…。
わたしもけっこう迷いました。
で、Commandというシステム変数(関数ということになってると思いますけど)に、
ファイルパスが入っているので、あとは読むだけです。
でも、Win2000/XP とかと、9x/Meなどはパスの送り方が違うようです。
(後者ではMSDOS名で渡される)
どちらにしても読むことは出来ますけど、オプションがつくとそのかぎりではありません。
(ちなみに一般的なフリーソフトは、前者のやり方で送ってくるようです)
下の関数を使ってみたらどうでしょう?作ってみました。Windows98では正常動作します。
Public Function CommandLine() As String
On Error Resume Next
Dim X As String
X = Command
If InStr(1, Left(X, 4), ":\") <> 0 Then
If Countstr(X, """") <> 2 Then
X = Mid(X, 1, InStr(UInstr(X, "\", UInstr(X, """", Len(X) - 1)), X, " ") - 1)
Else
X = Mid(X, 1, InStr(UInstr(X, "\"), X, " ") - 1)
End If
Else
X = Mid(X, InStr(1, X, " ") + 1)
End If
CommandLine = LongPath(DelQuot(X))
End Function
Public Function CommandOption() As String
On Error Resume Next
Dim X As String
X = Command
If InStr(1, X, ":\") <= 2 Then
X = Mid(X, InStr(UInstr(X, "\", UInstr(X, """", Len(X) - 1)), X, " ") + 1)
Else
X = Mid(X, 1, InStr(1, X, " ") - 1)
End If
CommandOption = DelQuot(X)
End Function
UInstr関数は以下のとおり、後で気づいたんですけど、
VB6のInstrRevとおんなじものらしいですね^^;
VB6使ってるのに、気づかず作成していました。
ま、いっか^^;
Public Function UInstr(Base As String, Search As String, Optional Start As Long = -1, Optional ByVal compare As VbCompareMethod = vbBinaryCompare) As Long
On Error GoTo 1: If Len(Base) = 0 Or Len(Search) = 0 Or Start < -1 Or Len(Search) >= Len(Base) Or Base = vbNullString Or Search = vbNullString Then GoTo 1
Dim i As Long
For i = IIf(Start = -1, Len(Base), Start) To 1 Step -1
If StrComp(Mid(Base, i, Len(Search)), Search, compare) = 0 Then UInstr = i: Exit Function
Next
1 UInstr = 0
End Function
忘れてました^^;まだ関数が使われてましたね^^;
Public Function DelQuot(tar As String)
On Error Resume Next
1 If Right(tar, 1) = """" Then Mid(tar, Len(tar)) = Space(1)
tar = Trim(tar)
If Right(tar, 1) = """" Then GoTo 1
2 If Mid(tar, 1, 1) = """" Then Mid(tar, 1) = Space(1)
tar = Trim(tar)
If Mid(tar, 1, 1) = """" Then GoTo 2
DelQuot = tar
End Function
Public Function LongPath(Path As String) As String
Dim sf As String * 255
GetLongPathName Path, sf, 255
If DelNull(sf) = "" Then LongPath = Path Else LongPath = DelNull(sf)
End Function
GetLongPathNameというのはAPI関数です。APIビューアを使って貼りつけてください。
まだありました^^;まったくどじですね^^;
Public Function Countstr(Base As String, Search As String, Optional start As Long = 0, Optional ByVal compare As VbCompareMethod = vbBinaryCompare) As Long
On Error GoTo 1: If Len(Base) = 0 Or Len(Search) = 0 Or start < -1 Or Len(Search) > Len(Base) Or Base = vbNullString Or Search = vbNullString Then GoTo 1
Dim i As Byte, n As Integer
n = start
Do
n = InStr(n + 1, Base, Search, compare)
If n = 0 Then Exit Do Else: i = i + 1
Loop
1 Countstr = i
End Function
もうないよね^^;
コマンドラインに渡す文字列は自由に指定できてしまうので
どちらにしろ、送られた文字列が
正しいファイル名かを判定する必要があると思います。
なので、””なりで囲まれた文字を
ファイルオープンするだけでもいいような気もしますが。
お二人ともありがとうございました
勉強になりました