Tworzenie nowego procesu (programowo) - Wersja do druku +- SafeGroup (https://safegroup.pl) +-- Dział: Forum ogólne (https://safegroup.pl/forum-6.html) +--- Dział: Programowanie - języki i technologie (https://safegroup.pl/forum-34.html) +---- Dział: C/C++ (https://safegroup.pl/forum-37.html) +---- Wątek: Tworzenie nowego procesu (programowo) (/thread-10242.html) |
Tworzenie nowego procesu (programowo) - chomikos - 10.04.2016 Najpopularniejszym dziś sposobem tworzenia nowego procesu jest odwołanie się do odpowiedniej funkcji, gdzie deklarujemy podstawowe informacje o procesie. Funkcja zwraca nam potem uchwyt do tego procesu (ang. handle) za pomocą którego możemy na nim operować. Teraz stworzymy program, który uruchamia daną aplikację, a następnie czeka na jej zakończenie. Wykorzystamy w nim funkcję WinAPI (windows.h) CreateProcess (funkcja ta przyjmuje bardzo dużo parametrów, z czego potrzebne jest nam tylko kilka). Kod: #include <windows.h> Przeanalizujmy kod linijka po linijce. Pierwsze dwie, są to dwie dobrze nam znane zaimportowane biblioteki – standardowa (stdio.h / cstdio), druga to WinAPI (windows.h)., trzecia to biblioteka obsługująca stringi a ostatnia iostream (wykorzystam z niej funkcje cin). Tworzymy główną część naszego programu (int main) bez żadnych parametrów (void). Teraz tworzymy dwa obiekty PROCESS_INFORMATION oraz STARTUPINFO – potrzebne są one nam do uruchamiania nowego procesu. Potem tworzymy string a nazwie a, i prosimy użytkownika o wpisanie ścieżki do programu. Potem widzimy zmienną logiczną BOOL nazwaną res – służy ona do sprawdzenia, czy uruchomienie procesu się powiodło (CreateProcessW również jest typem BOOL). Jeżeli zwróci on wartość TRUE – kontynnujmy, inaczej return 1. Przeanalizujmy teraz strukturę CreateProcess. Ma ona, jak to wiele komend z WinAPI, wiele parametrów, w większości niepotrzebnych. Najważniejsze dla nas są:
Kompilacja i uruchomienie (TDM-GCC 4.9.2 32-bit DEBUG) wygląda tak: [Aby zobaczyć linki, zarejestruj się tutaj] [Aby zobaczyć linki, zarejestruj się tutaj] Jak widać, wszystko wykonuje się tak, jak powinno. To by było na tyle, w razie czego pytajcie RE: Tworzenie nowego procesu (programowo) - Tajny Współpracownik - 10.04.2016 XD używasz pliku nagłówkowego iostream żeby skorzystać tylko że strumienia, skoro jednocześnie dodałeś stdio i nie użyłeś scanf... RE: Tworzenie nowego procesu (programowo) - chomikos - 10.04.2016 (10.04.2016, 13:12)Tajny Współpracownik napisał(a):Osobista preferencja, nie lubie scanf z char* RE: Tworzenie nowego procesu (programowo) - Tajny Współpracownik - 10.04.2016 "Bżydko to wyglonda " |