ID do artigo: 242416 - Última revisão: quinta-feira, 1 de julho de 2004 - Revisão: 2.1

Como enumerar tarefas de 16 bits no Windows NT usando o Visual Basic

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Pode haver ocasiões em que ele é necessário enumerar todas as tarefas 16 bits que estão sendo executados em um sistema Windows NT. Para fazer isso, você use as funções VDMEnumProcessWOW e VDMEnumTaskWOWEx API. A seção mais informações para seguir demonstra como usar essas funções no Visual Basic. Observe, também é necessário usar funções de voltar de chamada para enumerar os processos de 16 bits. Se você não estiver familiarizado com o uso de funções de retorno de chamada de dentro do Visual Basic, consulte o artigo mencionado na seção Referências deste artigo.

Mais Informações

Passos para criar o exemplo

  1. Inicie um novo projeto Standard EXE no Visual Basic. O Form1 é criado por padrão.
  2. Adicione um CommandButton ao formulário.
  3. Defina os formulários AutoReDraw propriedade como True.
  4. Selecione Project do menu e adicione um novo módulo para o projeto. Módulo1 será criado por padrão.
  5. Copie o código a seguir na janela de código do Module1:
    Option Explicit
    
    Declare Function VDMEnumProcessWOW Lib "VDMDBG.dll" _ 
    (ByVal fp As Long, lparam As Long) As Integer 
    
    Declare Function VDMEnumTaskWOWEx Lib "VDMDBG.dll " _ 
    (dwProcessId As Long, ByVal fp As Long, lparam As Long) As Integer 
    
    Declare Function lstrcpy Lib "kernel32" _ 
    (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long 
    
    Public Function PROCESSENUMPROC _
    (ByVal dwProcessId As Long, ByVal dwAttributes As Long, _
    lpUserDefined As Long) As Boolean
      
        Form1.Cls
        Form1.Print "dwProcessId: " & dwProcessId
        Form1.Print "dwAttributes: " & dwAttributes & vbCrLf 
    ' Pass the Process ID to this next function to enumerate that Process.
        Call VDMEnumTaskWOWEx(ByVal dwProcessId, AddressOf TASKENUMPROCEX, 0)
    
    End Function
    
    Public Function TASKENUMPROCEX _ 
    (ByVal dwThreadId As Long, ByVal hMod16 As Long, _ 
    ByVal hTask16 As Long, ByVal pszModName As Long, _ 
    ByVal pszFileName As Long, lpUserDefined As Long) As Boolean 
    
    ' Print Enumerated task of the 16bit process
        Form1.Print "dwThreadId: " & dwThreadId & vbCrLf & _
        "hMod16: " & hMod16 & vbCrLf & "hTask16: " & hTask16 & vbCrLf & _
        "pszModName: " & PointerToString(pszModName) & vbCrLf & _
        "pszFileName: " & PointerToString(pszFileName) & vbCrLf & _
        "lpUserDefined: " & lpUserDefined & vbCrLf
    ' Return value is false until there are no more tasks to enumerate.  
    End Function
    
    Private Function PointerToString(lPtr As Long) As String
    Dim sTemp As String * 255, Retval As Long
    ' Parse String Values returned from function call. 
    
        Retval = lstrcpy(sTemp, lPtr)
        If (InStr(1, sTemp, Chr(0)) = 0) Then
             PointerToString = ""
        Else
             PointerToString = Left(sTemp, InStr(1, sTemp, Chr(0)) - 1)
        End If
        
    End Function
    					
  6. Copie o código a seguir na janela de código do Form1:
    Private Sub Command1_Click() 
    
    Dim Retval As Long 
    ' Call VDMEnumProcessWOW to beging the enumeration
       Retval = VDMEnumProcessWOW(AddressOf PROCESSENUMPROC, 0)
    
    End Sub 
    					
  7. Salvar o projeto e, em seguida, pressione F5 para executar o projeto. Lista os processos enumerados no formulário.

Referências

170570  (http://support.microsoft.com/kb/170570/EN-US/ ) Como criar um manipulador de mensagens do Windows com AddressOf em VB
181578  (http://support.microsoft.com/kb/181578/EN-US/ ) Como funções do Visual Basic de retorno de chamada de uma Dll C

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Learning Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
  • Microsoft Visual Basic 6.0 Learning Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
  • Microsoft Visual Basic 5.0 Professional Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
  • Microsoft Visual Basic 6.0 Professional Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
  • Microsoft Visual Basic 5.0 Enterprise Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0 nas seguintes plataformas
    • Microsoft Windows NT 4.0
Palavras-chave: 
kbmt kbapi kbhowto KB242416 KbMtpt
Tradução automáticaTradução automática
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: 242416  (http://support.microsoft.com/kb/242416/en-us/ )