Sub Main()
On Error GoTo errpro
MsgBox UBound(GetCommandLine)
Exit Sub
errpro:
MsgBox Err.Description
End Sub
Function GetCommandLine(Optional MaxArgs)
'声明变量。
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'检查是否提供了 MaxArgs 参数。
If IsMissing(MaxArgs) Then MaxArgs = 10
' 使数组的大小合适。
ReDim ArgArray(MaxArgs)
NumArgs = 0: InArg = False
'取得命令行参数。
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'以一次一个字符的方式取出命令行参数。
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'检测是否为 space 或 tab。
If (C <> " " And C <> vbTab) Then
'若既不是 space 键,也不是 tab 键,
'则检测是否为参数内含之字符。
If Not InArg Then
'新的参数。
'检测参数是否过多。
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'将字符连接到当前参数中。
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'找到 space 或 tab。
'将 InArg 标志设置成 False。
InArg = False
End If
Next I
'调整数组大小使其刚好符合参数个数。
ReDim Preserve ArgArray(NumArgs)
'将数组返回。
GetCommandLine = ArgArray()
End Function
是代码的原因还是系统的原因?
On Error GoTo errpro
MsgBox UBound(GetCommandLine)
Exit Sub
errpro:
MsgBox Err.Description
End Sub
Function GetCommandLine(Optional MaxArgs)
'声明变量。
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'检查是否提供了 MaxArgs 参数。
If IsMissing(MaxArgs) Then MaxArgs = 10
' 使数组的大小合适。
ReDim ArgArray(MaxArgs)
NumArgs = 0: InArg = False
'取得命令行参数。
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'以一次一个字符的方式取出命令行参数。
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'检测是否为 space 或 tab。
If (C <> " " And C <> vbTab) Then
'若既不是 space 键,也不是 tab 键,
'则检测是否为参数内含之字符。
If Not InArg Then
'新的参数。
'检测参数是否过多。
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'将字符连接到当前参数中。
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'找到 space 或 tab。
'将 InArg 标志设置成 False。
InArg = False
End If
Next I
'调整数组大小使其刚好符合参数个数。
ReDim Preserve ArgArray(NumArgs)
'将数组返回。
GetCommandLine = ArgArray()
End Function
是代码的原因还是系统的原因?
假设编译好的程序名为omf.exe
选取若干个文件 右键打开方式、选择程序->omf.exe
获取的命令行参数是一个
求教这是什么原因?
****************
函数没有返回值Function GetCommandLine(Optional MaxArgs) as string()
答案很简单,那就是分隔符, 空格也好,逗号也好, 对于你的程序来说,接受到的只是一个command字符串, 你如果规定了参数用空格隔开或者逗号隔开,甚至是其他什么的符号隔开,那么你就可以将这个command字符串用相应的分隔符去截断, VB中现成的函数:split就可以做到将一个字符串按照指定的分隔字符将一个长的字符串分隔成一串短的字符串数组. 举例: 你运行: omf.exe aa 22 eee
你的程序中command参数为"aa 22 eee"
你定义:
dim cmd() as string
cmd=split(command," ")
就可以得到:
cmd(0)="aa"
cmd(1)="22"
cmd(2)="eee"
代码是从MSDN中复制的,MSDN说“本示例在某个函数中用 Command 函数获得命令行参数,并将命令行参数以 Variant 类型之数组返回”
To WallesCai:
您没有看我1楼的说明,命令行参数不是手工输入,是通过 ”选取多个文件-右键打开方式-我的程序” 的方式由系统提供的。我想实现的功能就是右键菜单-打开方式 提供多个文件名给我的程序作为参数
其一,你在"资源管理器"中,通过 ”选取多个文件-右键打开方式-我的程序” 的方式操作时,给这样新打开的程序进程传递的所有命令行参数就是只有一个第一个文件的完整路径名的,你竟想当然的以为一定会传多个了。这个你在sub main里用MsgBox Command()就看得出来了。或者你用别的一些查看进程信息的工具也是可以看出来的其二,就算只是一个文件的完整路径名,也是那种用双引号引起来的,允许包含空格字符的路径字符串,你找的这个MSDN中的古老的处理简单的多参数的函数根本不适合你这个需求。你如实在要做这类功能的话,可看看WINDOWS SHELL相关的MSDN资料中,有没有对应你这种操作的COM接口可提供这种文件列表,好像是有的。至少我记得在"资源管理器"中,先选中多个文件,再拖到另一可执行程序上是有这种接口的,当然,这和你的操作还是有点区别的:)
winRAR 记事本 等这些古老的程序是可以接收到多个参数的 不知道它用的什么办法。您是否可以帮忙找点代码指点一下?
另:我不加到200分你就不现身是吧?
有点明白了 看来真是我走入歧途了
先结贴了 换条路重走 遇到麻烦在呼叫你