MPS

Torak 19.03.02 22:13

MiniPS - PS klooni W2K:lle.

 Tekstiversio  Arvo: 1 (1 ääntä)  Äänestä: +  -
//////////////////////////////////////////////////////////////////////////
// MiniPS 1.0
//
// Unix:in PS komennon minimaalinen klooni, joka toimii vain W2K:ssa.
// MPS näyttää listan niistä ohjelmista joiden suoritus on menossa tai
// keskeytettynä. Näyttää ohjelman PID numeron ja ohjelman polkuineen.
//
// Testattu: BCC 5.5.1 ja LCC-Win32: Jan 30 2002
//////////////////////////////////////////////////////////////////////////
#include <windows.h>    // Yleiset Windows tavarat
#include <tlhelp32.h>   // CreateToolhelp32Snapshot()
#include <psapi.h>            // GetModuleFileNameEx()
#include <stdio.h>            // printf

int main(void)
{
        HANDLE hSnapShot;
        PROCESSENTRY32 pEntry;
        CHAR szFileName[MAX_PATH];
        BOOL hRes;
        HMODULE hModule;
        HANDLE hProcess;
        HINSTANCE hLib;
        DWORD dwSize;

        // Otetaan kuva koneen prosesseista
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
        if(hSnapShot == NULL)
        {
                fprintf(stderr,
                "MPS - Virhe: Tietoja ohjelmista ei saatu!");
                return 1;
        }

        pEntry.dwSize = sizeof(pEntry);

        // Etsitään ensimmäinen ohjelma
        if(FALSE == Process32First(hSnapShot, &pEntry))
        {
                CloseHandle(hSnapShot);
                fprintf(stderr,"MPS - Virhe: Ohjelmia ei löytynyt!");
                return 2;
        }

        do{
                // Halutaan kysyä prosessin tietoja
                hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                   FALSE, pEntry.th32ProcessID);
                if(hProcess)
                {
                        // Kysytaan prosessin kahva
                        if(EnumProcessModules(hProcess, &hModule, sizeof(hModule), &dwSize))
                        {
                                // Kysytään nimi
                                if(GetModuleFileNameEx(hProcess, hModule, szFileName, MAX_PATH))
                                {
                                        CloseHandle(hProcess);
                                        printf("%d\t%s\n",pEntry.th32ProcessID, szFileName);
                                }
                        }
                }
        }
        while(Process32Next (hSnapShot,&pEntry));

        CloseHandle(hSnapShot); // Siivotaan
        return 0;
}