Простой парсер аргументов командной строки - VB
Формулировка задачи:
Рылся в интернете - не нашел. Хотелось, конечно, RegExp.
Написал сам. В боевіх условиях вместо переменной St подставляем Command
Это все нужно, если аргументами командной строки могут попадаться пути с пробелами (как и положено, заключенные кавычками).
Может у кого еще есть похожие примеры.
Решение задачи: «Простой парсер аргументов командной строки»
textual
Листинг программы
Option Explicit Private Declare Function GetCommandLineAPI Lib "kernel32" Alias "GetCommandLineW" () As Long Private Declare Function CommandLineToArgvW Lib "shell32" (ByVal lpCmdLine As Long, pNumArgs As Long) As Long Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal Size As Long) Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Function PtrToString(ptr As Long) As String Dim buffer() As Byte Dim lengthString As Long If CBool(ptr) Then lengthString = lstrlenW(ptr) * 2 If CBool(lengthString) Then ReDim buffer(lengthString - 1) CopyMemory buffer(0), ByVal ptr, lengthString PtrToString = buffer End If End If End Function Private Function PtrToDWORD(ByVal ptr As Long) As Long Dim lngValue As Long If CBool(ptr) Then CopyMemory lngValue, ByVal ptr, 4& PtrToDWORD = lngValue End If End Function Public Function GetCommandLineArgs() As String() Dim cmdLinePtr As Long Dim numArgs As Long Dim argPtr As Long Dim i As Integer Dim strArgs() As String Dim GetCommand As String GetCommand = "2222 4444 66666 67fffd" ' фейковая CommandLine cmdLinePtr = CommandLineToArgvW(StrPtr(GetCommand), numArgs) ' фейковая CommandLine ' cmdLinePtr = CommandLineToArgvW(GetCommandLineAPI(), numArgs) ' Настоящая CommandLine Debug.Print numArgs ' кол-во аргументов If CBool(cmdLinePtr) Then ReDim strArgs(numArgs - 1) For i = 0 To numArgs - 1 argPtr = PtrToDWORD(cmdLinePtr + (i * 4)) strArgs(i) = PtrToString(argPtr) Debug.Print strArgs(i) ' Набор команд Next Call LocalFree(cmdLinePtr) GetCommandLineArgs = strArgs ' возвращаем массив команд End If End Function Private Sub Form_Load() GetCommandLineArgs End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д