Pas de dépendances
#include <windows.h> #include <tchar.h> #include <psapi.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib,"Psapi.lib") int main() { TCHAR fichier[5000]; DWORD pids[500]; DWORD returned; unsigned int i; int t; EnumProcesses(pids,500,&returned); for(i=0;i<returned/sizeof(DWORD);i++) { HANDLE h = OpenProcess(READ_CONTROL|PROCESS_QUERY_INFORMATION,0,pids[i]); printf("PID = %d ",pids[i]); if (h==NULL) { DWORD err = GetLastError(); printf("ECHEC HANDLE : Code %d\n",err); continue; } t = GetProcessImageFileName(h,fichier,5000); if (t==0) { DWORD err = GetLastError(); printf("ECHEC RECUP NOM : Code %d\n",err); continue; } _tprintf(_T(" %s\n"),fichier); CloseHandle(h); } return 0; }
Note : un programme intéressant, puisqu'il énumere les processus du systeme Il faut inclure le header, et linker la lib suivante #include <psapi.h> #pragma comment(lib,"Psapi.lib") NOTE : Ce programme ne compile pas sous Visual 6.0 : trop vieux. J'ai fait ce test sous Visual 2005 sous Windows XP sp2. Je pense que tout compilateur récent saura compiler ce tuto. La fonction EnumProcesses va me retourner les PID de tous les processus. Pour chacun d'entre eux, je les ouvre avec OpenProcess. je décide d'ouvrir ces processus avec les options READ_CONTROL|PROCESS_QUERY_INFORMATION Sans PROCESS_QUERY_INFORMATION, le GetProcessImageFileName n'aurait pas acces au processus. Le lien suivant mentionne toutes les options d'ouverture pour OpenProcess http://msdn2.microsoft.com/en-us/library/ms684880.aspx Pour les codes d'erreur : http://msdn2.microsoft.com/en-us/library/ms681381.aspx Note, le premier et 2e processus correspondent, il me semble au processus inactif du systeme et au scheduler : donc intouchables. Ne pas oublier CloseHandle a la fin.