Simplemente lo dejo por si a alguien le es util...

Código: Seleccionar todo
include 'E:\ASM\FASMP\INCLUDE\win32ax.inc'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;,,,Listado de Procesos,,,;;;;;;;;;
;;;;;;;;;,,,,,,p0is0n-123,,,,,,,,,;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section '.code' code readable executable
start:
invoke GlobalAlloc,0,2024
mov [ListaProcesos],eax
invoke CreateToolhelp32Snapshot,0x00000002,0
mov [cHandle],eax ; Guardamos el Handle
mov eax,sizeof.PROCESSENTRY32
mov [cProcInfo.dwSize],eax ; Metemos en la estructura su Size, importante para mas de Win Vista
invoke Process32First,[cHandle],addr cProcInfo ; Sacamos el Primer Process
cmp eax,0
JE cBye ; Si es 0 algo falla, cerramos el Handle y nos vamos
buclea: ;Si no es 0 entramos en un bucle para mostrarlos todos.
invoke lstrcat,ListaProcesos, cProcInfo.szExeFile
invoke lstrcat,ListaProcesos,"*_*"
invoke Process32Next,[cHandle],addr cProcInfo ;Obtenemos el siguiente
cmp eax,0 ; Comprobamos que no es el último
JE cBye ; Si es el último cerramos el Handle y nos vamos a comer.
JMP buclea ; Si no es el ultimo hay que continuar, volvemos al principio.
cBye:
invoke CloseHandle,[cHandle] ; Cerramos el Handle
invoke MessageBox,0,ListaProcesos,0,0
invoke ExitProcess,0 ; Cerramos el proceso.
.end start
section '.data' data readable writeable
struct PROCESSENTRY32
dwSize dd ?
cntUsage dd ?
th32ProcessID dd ?
th32DefaultHeapID dd ?
th32ModuleID dd ?
cntThreads dd ?
th32ParentProcessID dd ?
pcPriClassBase dd ?
dwFlags dd ?
szExeFile rb MAX_PATH
ends
cProcInfo PROCESSENTRY32 ?
cHandle dd ?
ListaProcesos dd ?