Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI, C++] Lista uruchomionych procesów

Ostatnio zmodyfikowano 2012-04-01 13:53
Autor Wiadomość
Katruf
Temat założony przez niniejszego użytkownika
[WinAPI, C++] Lista uruchomionych procesów
» 2012-03-28 18:55:01
Witam,
chciałbym napisać program w którym mógłbym sprawdzić czy dany proces jest uruchomiony np. xyz.exe.
Poszukałem trochę w internecie i znalazłem 2 rozwiązania
-funkcja CreateToolhelp32Snapshot() ale wykorzystanie jej wykracza ponad moje umiejętności (próbowałem przerobić pewien przykład ale niestety nie działa)
-za pomocą funkcji system() z odpowiednim argumentem ale tu mogę tylko zapisać aktualne procesy do pliku i jeszcze wyskakuje okienko konsoli które jest irytujące

Czy ktoś zna może lepszy sposób na pobranie aktualnie uruchomionych procesów do zmiennej/tablicy zmiennych lub wie jak zrobić aby któryś z "moich" działał program działa w tle i nie chcę aby cokolwiek wyskakiwało?
P-53380
Chlorek
» 2012-03-28 19:00:58
Działał w tle - to mogę pomóc. Po pierwsze nie robisz żadnego okna, ewentualne ukrycie konsoli kodem:
C/C++
HWND konsola = FindWindowA( "ConsoleWindowClass", NULL );
ShowWindow( konsola, SW_HIDE );

//Edit
Tak w sumie to jaki problem z tą listą w pliku? Utwórz plik tymczasowy, zapisz, wczytaj do tablicy, usuń plik.
P-53381
Katruf
Temat założony przez niniejszego użytkownika
» 2012-03-28 19:10:56
tylko jak wywołuję funkcję system()to wyskakuje mi konsola i z tym sobie nie umiem poradzić
P-53383
yoogi
» 2012-03-28 19:12:27
EnumProcess
P-53384
Katruf
Temat założony przez niniejszego użytkownika
» 2012-03-28 19:57:27
stworzyłem pewien programik (na razie w konsoli) ale mam pewien problem nazwy procesów są zapisywane w jakimś dziwnym formacie zmiennych a ja nie wiem jak je prze konwertować do jakiejś normalnej postaci typu string


PROCESSENTRY32 pe32;   //to jest ta zmienna

pe32.szExeFile         //a tu znajduje się nazwa procesu


czy wie ktoś jak to do np string wrzucić lub do czegoś innego co można w if porównać ?
P-53396
yoogi
» 2012-03-28 20:06:30
C/C++
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>

#pragma comment(lib, "psapi.lib")

void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[ MAX_PATH ] = TEXT( "<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 ) / sizeof( TCHAR ) );
        }
    }
    _tprintf( TEXT( "%s  (PID: %u)\n" ), szProcessName, processID );
    CloseHandle( hProcess );
}

int main( void )
{
    DWORD aProcesses[ 1024 ], cbNeeded, cProcesses;
    unsigned int i;
   
    if( !EnumProcesses( aProcesses, sizeof( aProcesses ), & cbNeeded ) )
    {
        return 1;
    }
   
    cProcesses = cbNeeded / sizeof( DWORD );
    for( i = 0; i < cProcesses; i++ )
    {
        if( aProcesses[ i ] != 0 )
        {
            PrintProcessNameAndID( aProcesses[ i ] );
        }
    }
    getchar();
    return 0;
}
P-53398
Katruf
Temat założony przez niniejszego użytkownika
» 2012-03-28 20:19:20
tylko to nie rozwiązuje mojego problemu bo ja potrzebuje sprawdzić każdy proces czy on nie jest akurat tym poszukiwanym
_tprintf to tylko wypisuje. Nie znasz może jakiegoś sposobu aby to tak wykonać?
P-53403
yoogi
» 2012-03-28 20:29:25
Każdy proces do bufora a potem porównujesz z twoim, jeśli chodzi o twoją własną aplikacje to polecam mutexy:
http://darkcult.nazwa.pl/wiki/index.php/Jedna_instancja
P-53405
« 1 » 2
  Strona 1 z 2 Następna strona