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 utilizando 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 | Reduzir tudo

Sumário

Poderão existir vezes quando é necessário enumerar todas as tarefas de 16 bits em execução no sistema Windows NT. Para o fazer, utilize as funções VDMEnumProcessWOW e VDMEnumTaskWOWEx API. A secção mais informações a seguir demonstra como utilizar estas funções no Visual Basic. Tenha em atenção que também é necessário utilizar funções back chamada para enumerar os processos de 16 bits. Se não estiver familiarizado com a utilização de funções de chamada de retorno de dentro do Visual Basic, consulte o artigo mencionado na secção referências deste artigo.

Mais Informação

Passos para criar o exemplo

  1. Inicie um novo projecto EXE padrão no Visual Basic. É criado o Form1 por predefinição.
  2. Adicione um CommandButton ao formulário.
  3. Defina os formulários AutoReDraw propriedade como VERDADEIRO.
  4. Seleccione o Project a partir do menu ' e adicione um novo módulo ao projecto. Módulo1 é criado por predefinição.
  5. Copie o código seguinte para a janela Code 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 seguinte para a janela Code do Form1:
    Private Sub Command1_Click() 
    
    Dim Retval As Long 
    ' Call VDMEnumProcessWOW to beging the enumeration
       Retval = VDMEnumProcessWOW(AddressOf PROCESSENUMPROC, 0)
    
    End Sub 
    					
  7. Guardar o projecto e, em seguida, prima F5 para executar o projecto. Lista os processos enumerados no formulário.

Referências

170570  (http://support.microsoft.com/kb/170570/EN-US/ ) Como criar um processador de mensagens do Windows com AddressOf no VB
181578  (http://support.microsoft.com/kb/181578/EN-US/ ) Como chamada de retorno do Visual Basic funções a partir 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )