VB のコマンドラインの扱いはめんどくしゃぁ〜。
実行ファイルにファイルがドラッグされると、コマンドラインが文字列で送られてくる。C言語では、 int main(int argc, char **argv) main関数で argc にはコマンドラインの数、 **argv にはコマンドライン文字列の配列、という形でそれぞれ取得できる。一方、VBでは Command$ 関数でコマンドラインを取得することができる。C言語と違って1つの文字列として取得する。2つ以上の文字列はスペースで区切られている。ちなみに、ファイルのパスは短い形式で送られてくる。"My Document" などという既にスペースが含まれているファイル・フォルダを考慮してのことかな? で、以下の関数では、送られてくるコマンドラインがファイルのフルパスのみであるということを前提として作ったものである。モデルはもちろん、C言語。それでは、はっけよいのこった。
'--------------------------------------------------------------------- ' 関数名 : ShuffleComLine ' 引 数 : (in) CommandLimeStr … コマンドライン文字列 ' (in/out) ComLineStr() … ふるいわけされたパスが格納される配列 ' 戻り値 : ふるいわけされたファイルのフルパスの数、 ' ファイルパスでなければ-1が返る '--------------------------------------------------------------------- Private Function ShuffleComLine(ByVal CommandLineStr As String, ByRef ComLineStr() As String) As Integer Dim SpacePos As Long Dim SearchStartPos As Long Dim PathNum As Integer Dim i As Integer '\マークが無いなら関数終了 If InStr(1, CommandLineStr, "\") = 0 Then ShuffleComLine = -1 Exit Function End If SpacePos = InStr(1, CommandLineStr, Space$(1)) 'SpacePos=0ならパスは1つだけ If SpacePos = 0 Then ReDim Preserve ComLineStr(0) As String ComLineStr(0) = CommandLineStr ShuffleComLine = 1 Exit Function End If '初期化-------------------------------- SearchStartPos = 1 '検索開始位置 SpacePos = -1 '再利用 PathNum = 0 '-------------------------------------- '取得したパスの数を調べる While SpacePos <> 0 SpacePos = InStr(SearchStartPos, CommandLineStr, Space$(1)) SearchStartPos = SpacePos + 1 PathNum = PathNum + 1 '取得したパスの数を加算 Wend '配列再初期化 ReDim Preserve ComLineStr(PathNum - 1) As String '初期化-------------------------------- SearchStartPos = 1 '検索開始位置 SpacePos = -1 '再利用 '-------------------------------------- 'スペース一文字分を追加する CommandLineStr = CommandLineStr & Space$(1) For i = 0 To PathNum - 1 SpacePos = InStr(SearchStartPos, CommandLineStr, Space$(1)) ComLineStr(i) = Mid$(CommandLineStr, SearchStartPos, SpacePos - SearchStartPos) SearchStartPos = SpacePos + 1 Next i ShuffleComLine = PathNum End Function ついでなんで使用例を載っけておく。なんて親切なんだろう。 Private Sub Form_Load() Dim CommandLine As String Dim ComLineStr() As String Dim GetPathNum As Integer Dim i As Integer Dim ShuffledPath As String CommandLine = Command$ GetPathNum = ShuffleComLine(CommandLine, ComLineStr()) For i = 0 To GetPathNum - 1 ShuffledPath = ShuffledPath & ComLineStr(i) If i <> GetPathNum - 1 Then ShuffledPath = ShuffledPath & vbCrLf End If Next i MsgBox ShuffledPath End Sub
上のコードをコンパイルして、出来上がる実行ファイルにファイルをD&Dしてね。ちなみに、コマンドラインに渡される文字数には制限があり、ある程度までいったらエラーになる。詳細は不明ゆえ、それは自分で調べてエラー処理を組み込んでください。 |