Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

About this user

regsvr32 wsh

Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run "regsvr32.exe c:\windows\system32\whatever.dll" 

wsh shell execute and return output

' MsgBox RunOutput("COMMAND /C DIR C:\", 0)
Function RunOutput(cProgram, nWindowType)
 
 '-- Obtain a Temporary File Name
 Dim oFS
 Set oFS = CreateObject("Scripting.FileSystemObject")
 Dim cFile
 cFile = oFS.GetSpecialFolder(2).Path & "\" & oFS.GetTempName
 
 '-- Execute the command and redirect the output to the file
 Dim oShell
 Set oShell = CreateObject("WScript.Shell")
 oShell.Run cProgram & " >" & cFile, nWindowType, True
 Set oShell = Nothing
 
 '-- Read output file and return
 Dim oFile
 Set oFile = oFS.OpenTextFile(cFile, 1, True)
 RunOutput = oFile.ReadAll()
 oFile.Close
 
 '-- Delete Temporary File
 oFS.DeleteFile cFile
 Set oFS = Nothing
 Set cFile = Nothing
 
 
End Function

vb6 shellexecute

   
      Option Explicit
   
      Option Base 0
   
      'code by JoshT
   
       
   
      Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As SECURITY_ATTRIBUTES, _
lpThreadAttributes As SECURITY_ATTRIBUTES, _
ByVal bInheritHandles As Long, _
 ByVal dwCreationFlags As Long, _
  lpEnvironment As Any, _
  ByVal lpCurrentDirectory As String, _
  lpStartupInfo As STARTUPINFO, _
  lpProcessInformation As PROCESS_INFORMATION) As Long
  
  Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
  Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, _
  lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, _
  lpOverlapped As Long) As Long
  Private Declare Function WaitForSingleObject Lib "kernel32" _
  (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, _
  phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, _
  ByVal nSize As Long) As Long
  Private Type STARTUPINFO
  cb As Long
 lpReserved As String
  lpDesktop As String
  lpTitle As String
  dwX As Long
   dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
  
              dwYCountChars As Long
  
              dwFillAttribute As Long
  
              dwFlags As Long

              wShowWindow As Integer

              cbReserved2 As Integer

              lpReserved2 As Long

              hStdInput As Long

              hStdOutput As Long

              hStdError As Long

      End Type

       

      Private Type PROCESS_INFORMATION

              hProcess As Long

              hThread As Long

              dwProcessId As Long

              dwThreadId As Long

      End Type

       

      Private Type SECURITY_ATTRIBUTES

              nLength As Long

              lpSecurityDescriptor As Long

              bInheritHandle As Long
 
      End Type
 
       
 
      Private Const NORMAL_PRIORITY_CLASS As Long = &H20&

       
 
      Private Const STARTF_USESTDHANDLES As Long = &H100&
 
      Private Const STARTF_USESHOWWINDOW As Long = &H1&

      Private Const SW_HIDE As Long = 0&
 
       

      Private Const INFINITE As Long = &HFFFF&
 
       

      Public Function RunCommand(CommandLine As String) As String

          Dim si As STARTUPINFO 'used to send info the CreateProcess
 
          Dim pi As PROCESS_INFORMATION 'used to receive info about the created process
 
          Dim retval As Long 'return value
  
          Dim hRead As Long 'the handle to the read end of the pipe
  
          Dim hWrite As Long 'the handle to the write end of the pipe
  
          Dim sBuffer(0 To 63) As Byte 'the buffer to store data as we read it from the pipe
 
          Dim lgSize As Long 'returned number of bytes read by readfile
 
          Dim sa As SECURITY_ATTRIBUTES
  
          Dim strResult As String 'returned results of the command line
 
         
 
          'set up security attributes structure
 
          With sa

              .nLength = Len(sa)
 
              .bInheritHandle = 1& 'inherit, needed for this to work
  
              .lpSecurityDescriptor = 0&
  
          End With
  
         
  
          'create our anonymous pipe an check for success
  
          '   note we use the default buffer size
 
          '   this could cause problems if the process tries to write more than this buffer size
  
'          retval = CreatePipe(hRead, hWrite, sa, 0&)
'
'          If retval = 0 Then
'
'              Debug.Print "CreatePipe Failed"
'
'              RunCommand = ""
'
'              Exit Function
'
'          End If
 
         
 
          'set up startup info
 
          With si
 
              .cb = Len(si)

              .dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW 'tell it to use (not ignore) the values below
 
              .wShowWindow = SW_HIDE
 
      '        .hStdInput = GetStdHandle(STD_INPUT_HANDLE)
 
              .hStdOutput = hWrite 'pass the write end of the pipe as the processes standard output
 
      '        .hStdError = GetStdHandle(STD_ERROR_HANDLE)
 
          End With
 
         
 
          'run the command line and check for success
 
          retval = CreateProcess(vbNullString, _
                                  CommandLine & vbNullChar, _
                                  sa, _
                                  sa, _
                                  1&, _
                                  NORMAL_PRIORITY_CLASS, _
                                  ByVal 0&, _
                                  vbNullString, _
                                  si, _
                                  pi)
        
        
 
          If retval Then
 
              
              
              'wait until the command line finishes
 
              '   trouble if the app doesn't end, or waits for user input, etc
 
              WaitForSingleObject pi.hProcess, INFINITE
            
            
           '  MsgBox "CreateProcess ok" & vbCrLf
            
            
             
 
              'read from the pipe until there's no more (bytes actually read is less than what we told it to)
 
              Do While ReadFile(hRead, sBuffer(0), 64, lgSize, ByVal 0&)
 
                  'convert byte array to string and append to our result
 
                  strResult = strResult & StrConv(sBuffer(), vbUnicode)
 
                  'TODO = what's in the tail end of the byte array when lgSize is less than 64???
 
                  Erase sBuffer()
 
                  If lgSize <> 64 Then Exit Do
 
              Loop
 
             
 
              'close the handles of the process
 
              CloseHandle pi.hProcess
 
              CloseHandle pi.hThread
 
         Else
 
              ' Debug.Print "CreateProcess Failed" & vbCrLf
              ' strResult = ""
              ' MsgBox "CreateProcess Failed" & vbCrLf
              
 
          End If
 
         
 
          'close pipe handles
 
          CloseHandle hRead
 
          CloseHandle hWrite
 
         
 
          'return the command line output

          RunCommand = Replace(strResult, vbNullChar, "")

      End Function