Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 3.175 pregleda

Najnovija ↓

ProcessID ( simple viewer ) 22.09.2004. u 19:52 · pre 269 meseci #1
Jel moze neko da mi napise neki source za C\C++ ... koji ce da ispisuje ProcessID svih aktivnih programa. Ili bar da mi kaze kako da to uradim ... koje API da koristim i kako ... !?

tnx
Re: ProcessID ( simple viewer ) 23.09.2004. u 22:21 · pre 269 meseci #2
Pogledaj artikal "CreateToolhelp32Snapshot" u MSDN dokumentaciji ili na sajtu, to je deo Tool Help artikla iz Win32 SDK sekcije, taj artikal pruza vecinu apija za procese.
Taj api nije dobro podrzan za WinNT, ali i dalje lista ID-ove aktivnih procesa, sto je tebi dovoljno za vecinu stvari.

Re: ProcessID ( simple viewer ) 26.09.2004. u 01:26 · pre 269 meseci #3
Za NT seriju (pri prevodjenju je potrebno dodati psapi.lib import biblioteku):
Code:

#include <windows.h>
#include <stdio.h>
#include <psapi.h>

int main() {
   DWORD pids[1024], priv, brpids, i;

   if (!EnumProcesses(pids, sizeof(pids), &priv))
      return 1;

   brpids = priv/sizeof(DWORD);
   for (i = 0; i < brpids; i++)
      printf("%4d\n", pids[i]);

   return 0;
}
Re: ProcessID ( simple viewer ) 29.09.2004. u 12:05 · pre 268 meseci #6
Dosao sam do ovog koda ( dole ) ali bi bilo lepo ako bi neko dodao jos samo da ispisuje putanju do programa . tnx

#include <windows.h>
#include <stdio.h>
#include <psapi.h>


void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown";




HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );



if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;



if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName) );

}
else return;
}
else return;


printf( "%s (Process ID: %u)\n", szProcessName, processID );

CloseHandle( hProcess );
}



void main( )
{


DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;



cProcesses = cbNeeded / sizeof(DWORD);



for ( i = 0; i < cProcesses; i++ )
PrintProcessNameAndID( aProcesses );


}


Re: ProcessID ( simple viewer ) 29.09.2004. u 19:35 · pre 268 meseci #7
Citat:
`and: @passenger
Jel mozes da dodas u taj kod jos i da ispisuje pored PID-a ime procesa i path ?

tnx

Odgovor si verovatno mogao da pronadjes malo pazljivijim citanjem MSDN dokumentacije. Vidim da si vec saznao kako da ispisujes ime procesa. Za dobijanje pune putanje do programa ciji je proces (pid), mogao bi da koristis slicnu funkciju, s tim da umesto "GetModuleBaseName()" pozoves npr. "GetModuleFileNameEx()" funkciju.

Code:

void PrintPIDPath(DWORD pid)
{
   char szProcessPath[MAX_PATH];

   HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 
                                  PROCESS_VM_READ, FALSE, pid );

   if ( hProcess )
   {
      HMODULE hMod;
      DWORD cbNeeded;

      if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
                               &cbNeeded) )
         GetModuleFileNameEx(hProcess, hMod,
                             szProcessPath, sizeof(szProcessPath));
   }

   printf( " %s\n", szProcessPath);

   CloseHandle( hProcess );
}


P.S. Bilo bi pozeljno da u buducim poruka kood postavljas izmedju "code" tagova, radi bolje preglednosti.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme