Skocz do zawartości

Nazwy uruchomionych programów


Surprise

Recommended Posts

Jest prostszy sposób, ale uzyskasz nim jedynie programy mające okna:

Musisz użyć funkcji EnumWindows(WNDENUMPROC lpWndProc, LPARAM lParam); gdzie lpWndProc to wskaźnik do procedury wyliczającej wszytkie programy mające okna, w lParam przekazujesz sobie wskaźnik do tablicy uchwytów okien.

EnumWindowsProc ma następującą postać:

EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HWND *TabhWnd = (HWND*)lParam;
static int i = 0;       

TabhWnd[i] = hwnd;
i++;

return TRUE;
}

Teraz do tablicy TabhWnd masz wpisane uchwyty wszytkich okien działająch programów. I z takim uchwytem możesz pobrać łatwo nazwę programu (widniejącą na pasku tytułu) w ten sposób:

GetWindowText(TabhWnd[i], title, 49);

Tylko uwaga, musisz pamiętać by to i w funkcji za każdym razem zerować po wywołaniu EnumWindows.

To tyle, miłego kodowania.

Link do komentarza
Udostępnij na innych stronach

Jest to jakaś metoda. Tylko nie podoba mi się duża ilość pracy jaką miałby wykonać korzystający z niej program no i to, że nie będą wzięte pod uwagę programy konsolowe. Poza tym nie wszystkie okna aplikacji muszą mieć ustanowione okno rodzica. Np. możliwe jest odpalenie funkcji MessageBox() z NULL-em jako uchwyt okna rodzica. W Twoim rozwiązaniu będzie ono traktowane jako oddzielny program, a tak przecież nie jest. Chyba jednak lepsza jest moja propozycja.

Link do komentarza
Udostępnij na innych stronach

Wezmie pod uwage konsolowe programy bo jakby nie bylo sa one odpalane w oknie. Rowniez nie potraktuje MessageBox-a jako osobny program nawet jesli jako HWND damy NULL, bo sprawdzalem. Najpierw radze sprawdzic zanim cos sie powie ;). Poza tym nie uwazam ze napisanie jednej funkcji jest duzym wysilkiem dla programisty i programu, no oczywiscie zalezy jakim kto jest programista - nie ma w tym wypowiedzeniu zadnych aluzji.

Powodzenia.

Link do komentarza
Udostępnij na innych stronach

Niezupełnie jest tak jak piszesz. Program odpalony z okna konsoli to w rzeczywistości 2 programy: interpreter komend konsoli i sam odpalony program. W systemie są to 2 oddzielne procesy, czyli programy. Poza tym np. konsola cygwina umożliwia odpalenie progamów w tle, czyli na jednej konsoli może pracować jednocześnie kilka procesów, co oznacza że jednemu oknu odpowiada kilka programów. Czyli z całym szacunkiem, Twoją metodę sobie podarować niezależnie od tego czy jest się mocnym czy słabym programistą. Ciekawi mnie natomiast to co napisałeś o funkcji MessageBox()odpalonej z NULL-em. Co zwraca GetParent() dla takiego okna ? Rzeczywiście tego nie sprawdzałem, ale zainteresowało mnie to.

Link do komentarza
Udostępnij na innych stronach

Sprawdzalem to moim programem pisanym na bazie tejze funkcji. I wywnioskowalem ze nie chodzi o to ze zwraca cos dziwnego tylko poprostu nie widzi wogole MessageBox-ow ktore sa uruchamiane w jednej instancji z jakims programem. Natomiast jesli uruchomisz program bez procedury okna wywolujacy poprostu MessageBox to wykryje go jako osobne okno.

Uwazam ze nie ma co sie klucic w tej sprawie. Poprostu twoje rozwiazanie jest bezkonkurencyjne jesli nadawca tematu chce miec wszytkie procesy ktore sa uruchomione w systemie, ale wtedy kosztem tego bedzie musial filtrowac to jakos zeby dostac tylko programy ktore chce wyswietlic. Natomiast moje jest dobre do tego zeby wychwycic tylko programy "typowe" takie ktore maja okienka, te ktorych uzytkownik swiadomie uzywa.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...