ciao a tutti... cercando in giro sono riuscito a trovare questo pezzo di codice che mi stampa a video l'elenco dei processi che ho aperto...
problema: capita che di alcuni programmi non mi da il nome ma solo il pid... mi chiedo perche? cercando in giro ho letto che fa cosi perche il programma del quale non mi da il nome è a 64 bit e non riesce a "gestirlo".. è vero?? nel caso come posso fare per ottenere un elenco completo dei programmi aperti sul pc (sia a 32 che 64 bit)??
ecco il codice che ho usato..
codice:
#include <windows.h>
#include <psapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * GetProcessName(DWORD processID ,char * szProcessName,
DWORD bufsiz)
{
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, 0, processID );
szProcessName[0]='\0';
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
bufsiz );
}
else return NULL;
}
else return NULL;
CloseHandle( hProcess );
return szProcessName;
}
int main(int argc, char**argv)
{
char szProcessName[MAX_PATH];
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses),
&cbNeeded ) )
return 1;
cProcesses = cbNeeded / sizeof(DWORD);
for ( i = 0; i < cProcesses; ++i )
{
GetProcessName(aProcesses[i],szProcessName,
MAX_PATH);
printf("%ld %s\n",aProcesses[i], szProcessName);
}
return 0;
}