@CanalQb


VBA - Bibliotecas de referencias - Windows Script Host Object



CanalQb



Sempre crie uma frase de segurança única para jogos, Airdrops e qualquer outra coisa de origem desconhecida, em vez de usar sua carteira principal.




Nome completo: Modelo de objeto do host de scripts do Windows
LibName: IWshRuntimeScripting
Local: ...\WINDOWS\system32\wshom.ocx

A dica atual está intimamente relacionada às informações anteriores escritas pelo A Dezii sobre a biblioteca Scripting Runtime. Ambas as bibliotecas compartilham a mesma funcionalidade das funções de arquivo, mas a biblioteca no tópico fornece possibilidades adicionais que podem ser usadas com vantagem. Aqui está uma breve visão geral: Um monte de funções de arquivo (o mesmo que na biblioteca Scripting Runtime) Funções de rede e impressora. Criando atalhos. Funções do shell, incluindo: inicialização avançada de aplicativos, registro de eventos e funções de registro, etc.

A dica atual é dedicada a dois aspectos mais utilizados: criação de atalhos e lançamento de aplicativos. Os interessados ​​em informações mais abrangentes devem reservar um tempo para acessar o MSDN: Windows Script Host .

Criando Atalhos

O código abaixo, bastante auto-explicativo, eu acho, cria um atalho de URL em "Favoritos" e atalhos de arquivo na área de trabalho e no menu Iniciar. Ele usa a coleção IWshRuntimeLibrary.WshShell.SpecialFolders para obter caminhos para diretórios relevantes. A lista completa dos nomes da coleção SpecialFolders pode ser encontrada no MSDN: SpecialFolders.

vba
Copy code
Public Sub CreateShortcuts()
    'declaração de variáveis
    Dim objWshShell As New IWshRuntimeLibrary.WshShell
    Dim objWshShortcut As IWshRuntimeLibrary.WshShortcut
    Dim objWshURLShortcut As IWshRuntimeLibrary.WshURLShortcut
    Dim strTargetFolder As String

    'criar atalho em "Favoritos"
    With objWshShell
        'caminho para "Favoritos"
        strTargetFolder = .SpecialFolders("Favoritos")
        'crie um atalho de URL em "Favoritos"
        Set objWshURLShortcut = .CreateShortcut(strTargetFolder & "\TheScripts.url")
    End With

    'defina o taget de atalho de URL e salve-o
    With objWshURLShortcut
        .TargetPath = "http://www.thescripts.com"
        .Save
    End With

    'criar atalho na área de trabalho disponível para todos os usuários
    With objWshShell
        'caminho para "Todos os usuários da área de trabalho"
        strTargetFolder = .SpecialFolders("AllUsersDeskTop")
        'create a shortcut in "All Users Desktop"
        Set objWshShortcut = .CreateShortcut(strTargetFolder & "\MyShortcut.lnk")
    End With

    With objWshShortcut
        'set the shortcut target, description and save it
        .TargetPath = "C:\SomeFile.txt"
        .Description = "Link to my file"
        .Save
    End With

    'create the same shortcut in Start Menu available for all users
    With objWshShell
        strTargetFolder = .SpecialFolders("AllUsersStartMenu")
        Set objWshShortcut = .CreateShortcut(strTargetFolder & "\MyShortcut.lnk")
    End With

    With objWshShortcut
        .TargetPath = "C:\SomeFile.txt"
        .Description = "Link to my file"
        .Save
    End With

    'destroy object variables
    Set objWshURLShortcut = Nothing
    Set objWshShortcut = Nothing
    Set objWshShell = Nothing
End Sub
Iniciando um Aplicativo

A biblioteca WSHOM fornece um método de função melhor que o VBA Shell para executar um aplicativo que não suporta automação. No exemplo a seguir, o Calc.exe é iniciado quando um botão de alternância é pressionado e finalizado quando é liberado ou o formulário é fechado. Além disso, o manipulador de eventos Form_Timer monitora o status do aplicativo Calc.exe e sempre que ele é fechado, o botão de alternância é liberado.

vba
Copy code
'form public variable para armazenar o objeto WshExec referindo
'para lançado aplicativo Calc.exe
Dim objCalc As IWshRuntimeLibrary.WshExec

Private Sub Form_Close()
    'terminate Calc.exe quando o formulário está sendo fechado
    If Not objCalc Is Nothing Then
        objCalc.Terminate
        Set objCalc = Nothing
    End If
End Sub

'manipulador de eventos do timer de formulário para monitorar o status do aplicativo Calc.exe
Private Sub Form_Timer()
    'se a variável pública WshExec não existir, então deixe o procedimento
    If objCalc Is Nothing Then Exit Sub
    
    'definir o estado do botão de alternância de acordo com o status do Calc.exe
    With Me
        If objCalc.Status = WshRunning Then
            .tglCalc = True
        Else
            .tglCalc = False
        End If
    End With
End Sub

Private Sub tglCalc_AfterUpdate()
    Dim objWshShell As New IWshRuntimeLibrary.wshShell
    
    If Me.tglCalc Then
        'Se o botão de alternância for pressionado, execute o Calc.exe
        'e atribuir o objeto WshExec retornado para formar uma variável pública
        Set objCalc = objWshShell.Exec("calc.exe")
    Else
        'Se o botão de alternância for liberado, encerre o arquivo Calc.exe
        objCalc.Terminate
    End If
    
    Set objWshShell = Nothing
End Sub
Espero que isso ajude!