Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как мониторить процесы в системе


Автор: eniac 29.6.2009, 09:36
И так... мне нужно написать программу которая должна мониторить все процессы в системе... 
и я не знаю как мне подойти к задаче. Подскажите с чего начать, что надо почитать и т. д. 

Автор: Lazin 29.6.2009, 10:33
CreateToolhelp32Snapshot и прочие ф-ии библиотеки Toolhelp

Автор: andrew_121 29.6.2009, 11:29
Код

/***************************************************************************/

class LProcessInfo {
public:
    LProcessInfo() {
      memset( &pi, 0, sizeof(PROCESSENTRY32) );
   }
    LProcessInfo( PROCESSENTRY32 p ) {
      memset( &pi, 0, sizeof(PROCESSENTRY32) );
      init(p);
   }
  ~LProcessInfo() { }
    /**/
    void init( PROCESSENTRY32 p ) { memcpy( &pi, &p, sizeof(PROCESSENTRY32) ); }
   /**/
   luint32 id()          const { return pi.th32ProcessID;       }
   luint32 size()        const { return pi.dwSize;              }
   luint32 usage()       const { return pi.cntUsage;            }
   luint32 module_id()   const { return pi.th32ModuleID;        }
   luint32 threads()     const { return pi.cntThreads;          }
   luint32 parent_id()   const { return pi.th32ParentProcessID; }
   lint32  parent_pri()  const { return pi.pcPriClassBase;      }
   luint32 flags()       const { return pi.dwFlags;             }
   const lchar*name()    const { return &pi.szExeFile[0];       }
   /**/
   bool operator< ( const LProcessInfo& pi ) {
      return l_strcmpi( name(), pi.name() ) < 0;
   }
private:
   PROCESSENTRY32 pi;
};

/***************************************************************************/

class LProcessInfoList: public LVector<LProcessInfo> {
public:
   LProcessInfoList() { refresh(); }
  ~LProcessInfoList() {}
   /**/
   void refresh() {
        HANDLE pl;
        PROCESSENTRY32 pe;
        /**/
        pl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        pe.dwSize = sizeof(PROCESSENTRY32);
        pe.th32ParentProcessID = 0;
        /**/
        if ( Process32First(pl, &pe) ) {
            do {
                push_back( LProcessInfo(pe) );
                pe.th32ParentProcessID = 0;
            } while ( Process32Next(pl, &pe) );
        }
        CloseHandle(pl);
    }
};

/***************************************************************************/


Типы поправь.

Автор: DrHex 30.6.2009, 01:31
Все что говорил Lazin + Timer.

Ну или NtQuerySystemInfo... Чето в таком духе..........

Автор: eniac 30.6.2009, 10:14
Спасибо за инфу....

Автор: alias_trinity 1.7.2009, 17:37
рекомендую заглянуть http://winmaster.org.ua/examples/15-promanager.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)