「アプリからひらく」には?

解決


Bit  2001-11-01 04:51:47  No: 75009  IP: [192.*.*.*]

テキストファイルを右クリックの「アプリケーションから開く」で私の作ったメモ帳で開くと、ちゃんと開けません。(文字が表示されない)
どうすればいいのでしょう?

編集    削除
たかみちえ  2001-11-01 05:10:34  No: 75010  IP: [192.*.*.*]

ええー、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

編集    削除
たかみちえ  2001-11-01 05:14:08  No: 75011  IP: [192.*.*.*]

忘れてました^^;まだ関数が使われてましたね^^;
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ビューアを使って貼りつけてください。

編集    削除
たかみちえ  2001-11-01 05:18:34  No: 75012  IP: [192.*.*.*]

まだありました^^;まったくどじですね^^;
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
もうないよね^^;

編集    削除
こころ  URL  2001-11-05 09:59:28  No: 75013  IP: [192.*.*.*]

コマンドラインに渡す文字列は自由に指定できてしまうので
どちらにしろ、送られた文字列が
正しいファイル名かを判定する必要があると思います。
なので、””なりで囲まれた文字を
ファイルオープンするだけでもいいような気もしますが。

編集    削除
Bit  2001-11-07 01:22:57  No: 75014  IP: [192.*.*.*]

お二人ともありがとうございました
勉強になりました

編集    削除