Получить в переменную результат Shell "regsvr32.. - VB

Узнай цену своей работы

Формулировка задачи:

Доброго Вам времени суток
Уважаемые господа.
С наступившим Вас Новым Годом.
Долгих лет Вам жизни, здоровья и успехов делах.
При наличии Вашего времени прошу Вас подсказать.
Данный код позволяет автоматически зарегистрировать список dll в List1.

При регистрации dll выходит диалоговое окно об успешном или не успешном выполнении регистрации.
Добавив к строке ключ

/s



Диалоговое окно не появляется.
Как сделать так чтобы сообщение о регистрации dll (успешном, не успешном ) попадало в переменную для последующей обработки.
Т.е.

С Уважением и Благодарностью
Намик

Решение задачи: «Получить в переменную результат Shell "regsvr32..»

textual
Листинг программы
Option Explicit
Dim hLib As String
Dim i As Integer
Dim dllz As String
Public fso As New FileSystemObject
Public file1 As File

Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As Long
    lpFile As Long
    lpParameters As Long
    lpDirectory As Long
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As Long
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
   
End Type
 
Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExW" (lpExecInfo As SHELLEXECUTEINFO) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const SEE_MASK_NOCLOSEPROCESS   As Long = &H40
Private Const SW_SHOWDEFAULT            As Long = 10
Private Const INFINITE                  As Long = -1&
 
Private Sub Command1_Click()

    Dim sh  As SHELLEXECUTEINFO
    Dim ret As Long
    
    sh.cbSize = Len(sh)
    sh.fMask = SEE_MASK_NOCLOSEPROCESS
    sh.lpFile = StrPtr("regsvr32.exe")
    
For i = 0 To List1.ListCount - 1

List1.ListIndex = i
List1.ListIndex = i
ChDir App.Path
dllz = List1.Text
sh.lpParameters = StrPtr("/s  " & dllz & "")

sh.nShow = SW_SHOWDEFAULT
    
    If ShellExecuteEx(sh) Then
    
        WaitForSingleObject sh.hProcess, INFINITE
    
        GetExitCodeProcess sh.hProcess, ret
        
        CloseHandle sh.hProcess
        
    
        If ret Then
        Debug.Print "1"
        Else
        Debug.Print "2"
          End If
        
    End If
    
   Next

End Sub

Private Sub Form_Load()

For Each file1 In fso.GetFolder(App.Path).Files
If fso.GetExtensionName(file1.Path) = "dll" Or fso.GetExtensionName(file1.Path) = "ocx" Then
List1.AddItem file1.Name
End If
Next file1

End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы