Surprise Napisano Kwiecień 18, 2019 Autor Zgłoś Udostępnij Napisano Kwiecień 18, 2019 Czy ktoś wie jak po prostu pobrać nazwy uruchomionych programów. Nazwy, a jeszcze lepiej to co mają na pasku tytułowym... Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Juju Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 zalozyc hooka (?) vide msdn pzdr Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Fragment Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 Pod Windowsem 95, Windows 98 i Windows 2000 służą do tego funkcje Process32First() i Process32Next(). Pod Windowsem NT nie ma tych funkcji, a za to jest inna EnumProcesses(). Myślę, że pod XP jednak są te pierwsze. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Fragment Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 Nicon, nie każdy program ma tylko jedno okno. Jeśli wyłuskasz wszystkie okna w systemie, to czy jesteś w stanie sprawdzić, które z nich są oknami głównymi programów. Poza tym, czy w twoim rozwiązaniu będą wzięte pod uwagę okna zminimalizowane ? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 Będą wzięte pod uwagę okna zminimalizowane a nawet okna ukryte. Żeby dojść do tego programu najbardziej na górze trzeba z pośród wszystkich znalezionych okien zostawic tylko te dla ktorych funkcja GetParent zwraca NULL. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Fragment Napisano Kwiecień 18, 2019 Zgłoś Udostępnij Napisano Kwiecień 18, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Kwiecień 19, 2019 Zgłoś Udostępnij Napisano Kwiecień 19, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Fragment Napisano Kwiecień 19, 2019 Zgłoś Udostępnij Napisano Kwiecień 19, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Kwiecień 19, 2019 Zgłoś Udostępnij Napisano Kwiecień 19, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Surprise Napisano Kwiecień 19, 2019 Autor Zgłoś Udostępnij Napisano Kwiecień 19, 2019 Dzięki wszystkim za pomoc... Szczególnie dziękuję NICONOWI, bo właśnie chodziło mi o programy, które mają swoje okna :D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.