如果你想监测你的查询运行之后又启动了哪些程序，可以使用SetWindowsHookEx (WH_SHELL)来建立一个钩子函数，不过这不太适合VB来做，最好使用C++或Delphi来做。
<END>
不管用VB，VC，DELPHI等，其实WINDOWS有关进程API 函数；都可以调用;不过首先得使用TLHELP32 来获得所有进程的句柄.然后进行相关操作。 
<END>     
这是从我的一个软件中提出的部分代码，是一个C++类： 
    // ProcessInfor.h: interface for the CProcessInfor class. 
    // 
    ////////////////////////////////////////////////////////////////////// 
     
    #if !defined(AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_) 
    #define AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_ 
     
    #if _MSC_VER >= 1000 
    #pragma once 
    #endif // _MSC_VER >= 1000 
     
    #define PROCESS_MAX_NUMBER 2048 
     
    class CProcessInfor : public CObject 
    { 
    public: 
     CProcessInfor(); 
     virtual ~CProcessInfor(); 
     
     int m_ProcessNumbers; //进程数目 
     
    public: 
     int GetProcessInformat(); 
     int Refresh(); 
     BOOL GetProcessAInfor(int nID , PROCESSENTRY32 *pProcessInfor); 
     
     
    }; 
     
    #endif // !defined(AFX_PROCESSINFOR_H__6AD843E3_A13E_11D5_8C79_909FCCDC071C__INCLUDED_) 
     
    // ProcessInfor.cpp: implementation of the CProcessInfor class. 
    // 
    ////////////////////////////////////////////////////////////////////// 
     
    #include "stdafx.h" 
    #include "TestTime.h" 
    #include "ProcessInfor.h" 
     
    #ifdef _DEBUG 
    #undef THIS_FILE 
    static char THIS_FILE[]=__FILE__; 
    #define new DEBUG_NEW 
    #endif 
    static PROCESSENTRY32 m_processInfor[PROCESS_MAX_NUMBER]; 
     
    ////////////////////////////////////////////////////////////////////// 
    // 
    //typedef struct tagPROCESSENTRY32 
    //{ 
    // DWORD dwSize; 
    // DWORD cntUsage; 进程引用记数 
    // DWORD th32ProcessID; 进程标识符 
    // DWORD th32DefaultHeapID; 默认堆标识符 
    // DWORD th32ModuleID; 模块标识符 
    // DWORD cntThreads; 线程引用记数 
    // DWORD th32ParentProcessID; 父进程标识符 
    // LONG pcPriClassBase; 进程创建的线程的基础优先级 
    // DWORD dwFlags; 保留 
    // char szExeFile[MAX_PATH]; 进程文件的路径 
    //} PROCESSENTRY32; 
    ////////////////////////////////////////////////////////////////////// 
    // Construction/Destruction 
    ////////////////////////////////////////////////////////////////////// 
     
    CProcessInfor::CProcessInfor() 
    { 
     int i; 
     
     for(i=0;i     { 
     memset(m_processInfor,0x00,sizeof(PROCESSENTRY32)); 
     }; 
     
     m_ProcessNumbers=0; 
     
     return; 
    } 
     
    CProcessInfor::~CProcessInfor() 
    { 
     
    } 
    ////////////////////////////////////////////////////////////////////// 
    //获取一个进程的数据 
    // 
    //参数：int nID=索引号 
    // PROCESSINFOR * pProcessInfor=存放数据的PROCESSINFOR指针 
    // 
    //返回： 
    // TRUE =成功 
    // FALSE=所需的数据不存在 
    BOOL CProcessInfor::GetProcessAInfor(int nID, PROCESSENTRY32 * pProcessInfor) 
    { 
     if(m_ProcessNumbers==0 || nID<0 || nID>PROCESS_MAX_NUMBER) 
     { 
     return FALSE; 
     }; 
     
     memcpy(pProcessInfor,&m_processInfor[nID],sizeof(PROCESSENTRY32)); 
     
     return TRUE; 
    } 
     
    ////////////////////////////////////////////////////////////////////// 
    //获取进程信息数据 
    // 
    // 
    //返回：当前进程的数目 
    // 
    int CProcessInfor::GetProcessInformat() 
    { 
     BOOL bStatu; 
     int nCount=0; 
     //int nError; 
     HANDLE hSnapshot; 
     PROCESSENTRY32 peInfor32; 
     
     hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
     if(hSnapshot==NULL) 
     { 
     return 0; 
     }; 
     
     nCount=0; 
     peInfor32.dwSize=sizeof(PROCESSENTRY32); 
     bStatu=Process32First(hSnapshot,&peInfor32); 
     memcpy(&m_processInfor[nCount],&peInfor32,sizeof(PROCESSENTRY32)); 
     
     while(bStatu) 
     { 
     nCount++; 
     if(nCount>PROCESS_MAX_NUMBER) 
     { 
     break; 
     }; 
     
     m_processInfor[nCount].dwSize=sizeof(PROCESSENTRY32); 
     bStatu=Process32Next(hSnapshot,&peInfor32); 
     memcpy(&m_processInfor[nCount],&peInfor32,sizeof(PROCESSENTRY32)); 
     
     /* 
     if(!bStatu) 
     { 
     nError=GetLastError(); 
     break; 
     }; 
     */ 
     }; 
     
     m_ProcessNumbers=nCount; 
     
     return nCount; 
    } 
    ////////////////////////////////////////////////////////////////////// 
    // 
    int CProcessInfor::Refresh() 
    { 
     int i; 
     
     for(i=0;i     { 
     memset(m_processInfor,0x00,sizeof(PROCESSENTRY32)); 
     }; 
     
     m_ProcessNumbers=0; 
     
     return GetProcessInformat(); 
    } 
<END>

    