Lister les processus NT
Merci à DrCharly93 pour ce post sur le NG PCSoft:
Comment lister les processus et modules en cours
Voici un bout de code trouver il y a longtemps sur internet
Procédure ProcesNT()
// Liste des process et modules sous NT
// Ce module pour fonctionner correctement doit être lancer dans une
// fenêtre disposant d'une table 'TABLE1' composer de 5 colonnes
// id numérique entier (index dans la liste)
// cProcessID texte
// cProcessName texte
// cModuleName texte
// cPathName texte
// Un interrupteur 'INTMODULE' permet de n'afficher
// que les process (INTMODULE=0)
// ou les process et modules correspondants (INTMODULE=1)
//
LOCAL
idTabProcess est un tableau de 200 entiers longs
Cb est un entier long=800 // taille en octets du tableau idTabProcess
CbNeeded est un entier long
NumElements est un entier long
hTabModule est un tableau de 200 entiers longs
Cb2 est un entier long=800 // taille en octets du tableau hTabModule
CbNeeded2 est un entier long
NumModules est un entier long
Pname est une chaine
FileName est une chaine fixe sur 260
BaseName est une chaine fixe sur 260
nSize est un entier long=260 // taille de FileName et BaseName
lret,l1,l2 est un entier long
hProcess est un entier long
i,i2 est un entier long
NumDll est un entier long
NumDll=chargedll('PSAPI.DLL')
si NumDll=0 alors
erreur('La dll PSAPI n'a pas été chargée')
renvoyer faux
fin
//
// The EnumProcesses function retrieves the process identifier
// for each process object in the system.
//
// BOOL EnumProcesses(
// DWORD * lpidProcess, // array to receive the process identifiers
// DWORD cb, // size of the array
// DWORD * cbNeeded // receives the number of bytes returned
// );
Lret=appeldll32('PSAPI.DLL','EnumProcesses',&idTabProcess,Cb,&CbNeeded)
NumElements=CbNeeded/4 // Taille renvoyée divisée par la taille d'un
entier long (4 octets)
Pour i=1 a NumElements
//
// The OpenProcess function returns a handle to an existing process object.
//
// HANDLE OpenProcess(
// DWORD dwDesiredAccess, // access flag
// BOOL bInheritHandle, // handle inheritance flag
// DWORD dwProcessId // process identifier
// );
//
HProcess=appeldll32('KERNEL32.DLL','OpenProcess',oubinaire(1024,16),0,idTabP
rocess[i])
si HProcess<>0 alors // On a un processus. On va rechercher ses modules.
//
// The EnumProcessModules function retrieves a handle for each module
// in the specified process.
//
// BOOL EnumProcessModules(
// HANDLE hProcess, // handle to the process
// HMODULE * lphModule, // array to receive the module handles
// DWORD cb, // size of the array
// LPDWORD lpcbNeeded // receives the number of bytes returned
// );
// Process_Query_Information=1024
// Process_All_Access=16
//
Lret=Appeldll32('PSAPI.DLL','EnumProcessModules',Hprocess,&hTabModule,Cb2,&C
bNeeded2)
si LRet<>0 alors
NumModules=CbNeeded2/4
SI INTMODULE=0 alors NumModules=1
Pour i2=1 a NumModules
// The GetModuleBaseName function retrieves the base name of the
specified module.
//
//DWORD GetModuleBaseName(
// HANDLE hProcess, // handle to the process
// HMODULE hModule, // handle to the module
// LPTSTR lpBaseName, // buffer that receives the base name
// DWORD nSize // size of the buffer
//);
L1=Appeldll32('PSAPI.DLL','GetModuleBaseNameA',HProcess,hTabModule[i2]
....
,&BaseName,nSize)
SI L1=0 alors BaseName=''
Si i2=1 alors Pname=minuscule(BaseName[[1 à L1]])
//
// The GetModuleFileNameEx function retrieves the fully qualified path
// for the specified module.
//
// DWORD GetModuleFileNameEx(
// HANDLE hProcess, // handle to the process
// HMODULE hModule, // handle to the module
// LPTSTR lpFilename, // buffer that receives the path
// DWORD nSize // size of the buffer
// );
//
L2=Appeldll32('PSAPI.DLL','GetModuleFileNameExA',HProcess,hTabModule[i2] ...
,&FileName,nSize)
Si L2=0 alors FileName=''
TABLEAJOUTE('TABLE1',i+i2/1000+TAB+idTabProcess[i]+TAB+PName+...
TAB+Minuscule(BaseName[[1 à L1]])+...
tab+Minuscule(FileName[[1 a L2]]))
fin
fin
LRet=Appeldll32('KERNEL32.DLL','CloseHandle',HProcess)
FIN
fin
si NumDll<>0 alors
dechargedll(NumDll)
fin
Cette Q&R a été trouvée sur WDForge.org : http://old.wdforge.org/modules/smartfaq/faq.php?faqid=4