Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Potrzebujesz pomocy w zrozumieniu "TerminateProcess ()"
#1
Hej, więc to chyba najgłupsze pytanie. Próbuję zrobić prosty plik wykonywalny, który zakończy proces mojego wyboru.   Powiedzmy na przykład, że chciałem zamknąć plik notatnika i chciałem, aby plik wykonywalny zrobił to za mnie, czy działałaby funkcja TerminateProcess ()? Jeśli nie, to co z ExitProcess ()?   Byłbym wdzięczny, gdybyście mnie oświecili i dali mi kilka przykładów.       Kod:   #include <iostream> #include <Windows.h> using namespace std; int main () {HWND hwnd = FindWindowA (0, "Untitled - Notepad"); if (hwnd) {cout << "Znaleziono teraz proces kończący." << endl; } TerminateProcess (hwnd, 0); system ("pauza"); return 0; }   KOD POWYŚCIE: Próbowałem, nic się nie stało. Zasadniczo to wszystko, o czym myślałem do tej pory.
Reply
#2
https:
Reply
#3
@ Deez420DankBall dajesz TerminateProcess uchwyt do okna, podczas gdy działa z uchwytami procesu. Funkcja @ wi1 jest interesująca (nawet nie wiedziałam o jej istnieniu), ale nie będzie działać, ponieważ potrzebujesz obsługi procesu z uprawnieniem PROCESS_TERMINATE, a funkcja, którą zasugerował, GetProcessHandleFromHwnd, daje ci uchwyt bez tego pozwolenia. Najlepszym rozwiązaniem jest zatem: 1. Uzyskaj identyfikator procesu okna za pomocą GetWindowThreadProcessId 2. Wywołaj OpenProcess z żądaniem UCHWYTU do tego identyfikatora procesu z uprawnieniem dostępu PROCESS_TERMINATE 3. Użyj tego uchwytu w TerminateProcess Przeczytaj dokumentację i postępuj krok po kroku: 1. Pobierz PID z HWND i wydrukuj go na konsoli 2. Gdy to zrobisz, użyj OpenProcess i wypisz identyfikator HANDLE do konsoli (jeśli nie NULL to znaczy, że zadziałało) 3. Na koniec użyj uchwytu z TerminateProcess.
Reply
#4
Zacytować: Originally Posted by harakirinox @ Deez420DankBall dajesz TerminateProcess uchwyt do okna, podczas gdy działa z uchwytami procesu. Funkcja @ wi1 jest interesująca (nawet nie wiedziałam o jej istnieniu), ale nie będzie działać, ponieważ potrzebujesz obsługi procesu z uprawnieniem PROCESS_TERMINATE, a funkcja, którą zasugerował, GetProcessHandleFromHwnd, daje ci uchwyt bez tego pozwolenia. Najlepszym rozwiązaniem jest zatem: 1. Uzyskaj identyfikator procesu okna za pomocą GetWindowThreadProcessId 2. Wywołaj OpenProcess z żądaniem UCHWYTU do tego identyfikatora procesu z uprawnieniem dostępu PROCESS_TERMINATE 3. Użyj tego uchwytu w TerminateProcess Przeczytaj dokumentację i postępuj krok po kroku: 1. Pobierz PID z HWND i wydrukuj go na konsoli 2. Gdy to zrobisz, użyj OpenProcess i wypisz identyfikator HANDLE do konsoli (jeśli nie NULL to znaczy, że zadziałało) 3. Na koniec użyj uchwytu z TerminateProcess. Doceniam to.
Reply




Users browsing this thread: 1 Guest(s)