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?
|
|
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: 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. |
|
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ć |
|
yoogi |
» 2012-03-28 19:12:27 EnumProcess |
|
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ć ? |
|
yoogi |
» 2012-03-28 20:06:30 #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; }
|
|
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ć?
|
|
yoogi |
» 2012-03-28 20:29:25 |
|
« 1 » 2 |