Para enumerarlas tendremos que recorrer las máquinas virtuales que se estén ejecutando y sobre cada una de ellas enumerar las aplicaciones 16 bits que se ejecutan.
Pongo un ejemplo para saber si una aplicación de este tipo está ejecutándose:
cpp
#include <vdmdbg.h> bool IsRunning16_(char* Name) { struct TRuningProcess16{ char* Name; bool Running; static BOOL WINAPI ProcessTasks(DWORD dwThreadId, WORD hMod16, WORD hTask16, PSZ pszModName, PSZ pszFileName, LPARAM PE) { if(strstr(strupr(pszFileName), strupr(((TRuningProcess16*)PE)->Name))) return ((TRuningProcess16*)PE)->Running = true; return false; } static BOOL WINAPI ProcessVDMs(DWORD dwProcessId, DWORD dwAttrib, LPARAM PE) { VDMEnumTaskWOWEx(dwProcessId, (TASKENUMPROCEX)ProcessTasks, PE); return ((TRuningProcess16*)PE)->Running; } } PE = {Name,0}; VDMEnumProcessWOW((PROCESSENUMPROC)PE.ProcessVDMs, (LPARAM)&PE); return PE.Running; }
Espero que sea de utilidad.
Saludos.