VB6.0 in order to provide command-line arguments support, provided the commands () interface, so through the command () function can get all the incoming parameters, but very unfriendly, VB all the parameters are closed together, become a string, when there are multiple parameters, To use it is not so convenient, so, then there is the following code, code I do not remember where it came from, if you are the author of the article, please let me know [email protected]@
Option Explicit
Private Declare Function getcommandlinew Lib "kernel32" () as Long
Private Declare Function lstrlenw Lib "kernel32" (ByVal lpstring as Long) as Long
Private Declare Function commandlinetoargvw Lib "Shell32" (ByVal lpcmdline as Long, Pnnumargs as long) as Long
Private Declare Function localfree Lib "kernel32" (ByVal Hmem as Long) as Long
Private Declare Sub copymemory Lib "kernel32" Alias "RtlMoveMemory" (Destination as any, Source as any, ByVal Length A s Long)
Public Function Splitcmd (ByRef Argc as Long, ByRef Argv () as String)
Dim Nnumargs as Long '//command-line argument number
Dim lpszarglist as Long '//command-line parameter array address
Dim Lpszarg as Long '//command line parameter address
Dim narglength as Long '//command line parameter length
Dim Szarg () as Byte '//command line Parameters
Dim I as Long
lpszarglist = COMMANDLINETOARGVW (Getcommandlinew (), Nnumargs)
If lpszarglist Then
ARGC = Nnumargs '//output total number
ReDim Argv (nNumArgs-1)
copymemory ByVal varptr (lpszarg), ByVal lpszarglist, 4 '//Get argv (0) address
For i = 0 to nNumArgs-1
narglength = Lstrlenw (lpszarg)
ReDim szarg (narglength * 2-1)
copymemory ByVal varptr (szarg (0)), ByVal Lpszarg, Narglength * 2
Argv (i) = CStr (Szarg)
Lpszarg = Lpszarg + narglength * 2 + 2
Next
Erase Szarg
Call LocalFree (lpszarglist)
End If
End Function
The invocation is simple, the entry function Splitcmd (ByRef Argc as Long, ByRef Argv () as String), the first parameter is the passed parameter: the total number of parameters, the second parameter is the parameter array, it is necessary to note that the return value of this function is the same as the C language, ARGC at least one value, that is the path of the program itself, ARGV (0) is the path of the program itself, the following provides a way to use.
Option Explicit
Private Sub Form_Load ()
Dim ARGC as Long, ARGV () as String
Dim I as Integer, szcmd as String
Call Splitcmd (ARGC, ARGV ())
For i = 0 to Argc-1
Szcmd = szcmd & I & VbTab & ARGV (i) & VbCrLf
Next
MsgBox Szcmd
End Sub
In this way, you will get a result similar to the following:
Here, everything goes well.
Girl does not Cry (qq:191035066) @2011-11-13 16:02
Category: VB6.0
vb command line arguments are delimited, similar to the C language of main (int argc, char* argv[])