Escape double quote in VB string

后端 未结 3 1065
说谎
说谎 2020-11-30 06:26

I have used following piece of code to execute schtasks command from VB6. While executing it, ignores folder if they contains spaces. For example, \"C:\

3条回答
  •  渐次进展
    2020-11-30 06:55

    Did you try using double-quotes? Regardless, no one in 2011 should be limited by the native VB6 shell command. Here's a function that uses ShellExecuteEx, much more versatile.

    Option Explicit
    
    Private Const SEE_MASK_DEFAULT = &H0
    
    Public Enum EShellShowConstants
            essSW_HIDE = 0
            essSW_SHOWNORMAL = 1
            essSW_SHOWMINIMIZED = 2
            essSW_MAXIMIZE = 3
            essSW_SHOWMAXIMIZED = 3
            essSW_SHOWNOACTIVATE = 4
            essSW_SHOW = 5
            essSW_MINIMIZE = 6
            essSW_SHOWMINNOACTIVE = 7
            essSW_SHOWNA = 8
            essSW_RESTORE = 9
            essSW_SHOWDEFAULT = 10
    End Enum
    
    Private Type SHELLEXECUTEINFO
            cbSize        As Long
            fMask         As Long
            hwnd          As Long
            lpVerb        As String
            lpFile        As String
            lpParameters  As String
            lpDirectory   As String
            nShow         As Long
            hInstApp      As Long
            lpIDList      As Long     'Optional
            lpClass       As String   'Optional
            hkeyClass     As Long     'Optional
            dwHotKey      As Long     'Optional
            hIcon         As Long     'Optional
            hProcess      As Long     'Optional
    End Type
    
    Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (lpSEI As SHELLEXECUTEINFO) As Long
    
    Public Function ExecuteProcess(ByVal FilePath As String, ByVal hWndOwner As Long, ShellShowType As EShellShowConstants, Optional EXEParameters As String = "", Optional LaunchElevated As Boolean = False) As Boolean
        Dim SEI As SHELLEXECUTEINFO
    
        On Error GoTo Err
    
        'Fill the SEI structure
        With SEI
            .cbSize = Len(SEI)                  ' Bytes of the structure
            .fMask = SEE_MASK_DEFAULT           ' Check MSDN for more info on Mask
            .lpFile = FilePath                  ' Program Path
            .nShow = ShellShowType              ' How the program will be displayed
            .lpDirectory = PathGetFolder(FilePath)
            .lpParameters = EXEParameters       ' Each parameter must be separated by space. If the lpFile member specifies a document file, lpParameters should be NULL.
            .hwnd = hWndOwner                   ' Owner window handle
    
            ' Determine launch type (would recommend checking for Vista or greater here also)
            If LaunchElevated = True Then ' And m_OpSys.IsVistaOrGreater = True
                .lpVerb = "runas"
            Else
                .lpVerb = "Open"
            End If
        End With
    
         ExecuteProcess = ShellExecuteEx(SEI)   ' Execute the program, return success or failure
    
        Exit Function
    Err:
        ' TODO: Log Error
        ExecuteProcess = False
    End Function
    
    Private Function PathGetFolder(psPath As String) As String
        On Error Resume Next
        Dim lPos As Long
        lPos = InStrRev(psPath, "\")
        PathGetFolder = Left$(psPath, lPos - 1)
    End Function
    

提交回复
热议问题