Zamykanie aplikacji znając PID

0

Mam problem z wysyłaniem komunikatu zamknięcia aplikacji znając PID.

  1. Za pomocą EnumWindows pobieram uchwyty okien. Wszystko jest w porządku jeśli aplikacja jest jednookienkowa. W przeciwnym razie nie wiem jak ustalić uchwyt głównego okna.

  2. Jak sprawdzić czy po wysłaniu komunikatu zamknięcia proces się zakończył?
    Wysyłając komunikat widzę, że aplikacja się zamyka jednak funkcja
    OpenProcess(PROCESS_ALL_ACCESS, False, LPid) nadal zwraca uchwyt

0

Jeżeli chcesz uzyskać HWND programu to moze przyda się Tobie sklecony <ort>przeze mnie </ort>kod w gotowcu na:
Uchwyt na podstawie nazwy pliku exe programu - tylko że wtedy to potrzebujesz
podać nazwę exe aplikacji. Jednak może sobie dopasujesz ten kod do swoich potrzeb. Inaczej nie bardzo
umiem Tobie pomóc. Sprawdzenie czy proces nadal jest uruchomiony też umiem zrobić tylko po nazwie exe.

0

Aplikacja musi importować moduł Windows.

var
  H: THandle;

{ gdzieś w procedurze }

  //uzyskujemy uchwyt do procesu o podanym PID, z uprawnieniami do zamknięcia
  //programu. Drugi argument ustawiony na true pewnie pozwoli na zamknięcie procesów potomnych.
  H := OpenProcess(PROCESS_TERMINATE, false, PID);
  if H <> 0 then
    //zamykamy proces (drugi argument to zwracany errorcode)
    TerminateProcess(H, 0)
  else
    //PID nieprawidłowy albo brak uprawnień
    Writeln('Wystapil blad!');

Edit: uups... nie zauważyłem polecenia 2. Sprawdziłem to i okazuje się, że w procedurze TerminateProcess wysyłany jest jedynie sygnał, a funkcja prawdopodobnie nie czeka na zamknięcie programu, więc przez pewien czas jeszcze zwracany jest Handle.

0

Chodzi mi o to aby zamknąć aplikację a nie zabić proces. Aplikacja musi mieć możliwość zapisania ustawień.

0

No to mój kod pobierze Tobie HWND, pod ktory możesz spróbować wysłać odpowiedni komunikat.
Może wtedy aplikacja zareaguje jak trzeba i się zamknie - w sposób taki jakbyś to zrobił ręcznie.

0

Zadziała, ale nie w każdym przypadku.

Funkcja pobierze uchwyt pierwszego okna danego procesu. Wcale nie jest powiedziane, że będzie to główne okno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1