Procesos en Visual Basic

En esta sección voy a tratar temas relacionados con los procesos desde Visual Basic en un entorno Windows de Microsoft. Se van a tocar diferentes API según sistema operativo, Windows 9x o NT, además y es por aquí por donde comenzaré, la VDM (Máquina Virtual DOS), necesaria para gestionar procesos 16 bit en NT.

No es que sea un experto en el tema, ya lo digo de antemano, pero se me han presentado problemas relacionados con procesos al migrar una aplicación a NT y he llevado todo a buen puerto.

Tareas a lo mejor no muy comunes en otros proyectos, como son la comprobación de si existe ya una instancia de un programa en memoria, o provocar su terminación, tienen implementaciones diferentes según el sistema operativo.

Resultado de la recopilación de información que tuve que hacer en su momento, llego a la conclusión de que en un sistema como el descrito existen diferentes tipos de procesos, ya sean procesos, hilos, tareas, ventanas, etc... y la ramificación que he tomado es la que sigue:

- Windows 9x
  Trabaja o mejor dicho trata a todas las aplicaciones por igual, con win32. Incluso lo que vamos a llamar Tareas 16bit. La API que nos permite trabajar con procesos reside casi completamente en KERNEL32 así que con lo puesto podemos tirar. Algunos ejemplos son:

Declare Function CreateToolhelp32Snapshot& Lib "KERNEL32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long)
Declare Function CloseHandle& Lib "KERNEL32" (ByVal hObject As Long)
Declare Function Process32First& Lib "KERNEL32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32)
Declare Function Process32Next& Lib "KERNEL32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32)

La estructura PROCESSENTRY32 es como sigue:

Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long ' this process
  th32DefaultHeapID As Long
  th32ModuleID As Long ' associated exe
  cntThreads As Long
  th32ParentProcessID As Long ' this process's parent process
  pcPriClassBase As Long ' Base priority of process's threads
  dwFlags As Long
  szExeFile As String * 200 ' Path
End Type

- Windows NT
  

 

Un saludo.
Dormo