ACC: Como aguardar um processo em shell para concluir

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 99940
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.

Quando você estiver usando a função Shell() ou a ação de macro ExecutarAplicativo para executar outro programa ou processo, o Microsoft Access não espera para o processo em shell termine antes de processar a próxima linha na macro ou função. Isso causa problemas de macros e funções cujas ações subseqüentes dependem os resultados de processo em shell.

Este artigo demonstra uma função chamada WaitShell() que recebe um nome de aplicativo ou processo para executar, do Microsoft Access inicia o processo e espera finalizar.
Mais Informações
A função seguinte do Microsoft Access, WaitShell(), usa GetModuleUsage(), uma função de API do Microsoft Windows, para determinar se o processo em shell foi encerrado. A função Shell(), se ele começar com êxito o processo, retorna um identificador do módulo de processo. Se o processo não estiver mais sendo executado, o identificador é inválido e a função GetModuleUsage() retorna um valor de 0. A função WaitShell() simplesmente faz um loop até que o módulo não esteja mais válido.



Observação: Você pode ter a seguinte função GetModuleUsage() Windows API definida em uma biblioteca do Microsoft Access existente. Se você receber uma mensagem de erro de nome de procedimento duplicados, exclua a instrução Declare do seu código.
   Option Explicit   Declare Function GetModuleUsage% Lib "Kernel" (ByVal hModule%)   Function WaitShell( AppName as String)      Dim hMod as Integer      hMod = Shell(AppName, 1)      If (Abs(hMod) > 32) then         While (GetModuleUsage(hMod))            DoEvents         Wend       Else         MsgBox "Unable to start " & AppName      End If   End Function   To test the function, create and run the following Microsoft Access   macro:      Action      ------      RunCode      MsgBox      Macro Actions      -------------------------------------------      RunCode         Function Name: =WaitShell("Command.com")      MsgBox         Message: Done!   -or-   run the following Microsoft Access function:      Function TestWaitShell()         x=WaitShell("Command.com")         MsgBox "Done!"      End Function				

Ambos os exemplos acima iniciar instâncias de prompt do MS-DOS, que permanecem até que você encerrar digitando a "exit" (sem as marcas de cotações) na linha de comando e pressionando ENTER.
Referências
Para obter mais informações sobre como usar a função Shell no Microsoft Access 7.0 e 97, consulte o seguinte artigo na Base de dados de Conhecimento da Microsoft:
178116Como determinar quando um processo em shell termina

Microsoft Windows "referência do programador, volume 2: funções," versão 3.1, páginas 403 404
encerrar o shell básico

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 99940 - Última Revisão: 12/04/2015 09:29:17 - Revisão: 2.0

Microsoft Access 1.0 Standard Edition, Microsoft Access 1.1 Standard Edition, Microsoft Access 2.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbinterop kbprogramming KB99940 KbMtpt
Comentários