Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Miten suljetaan päällä oleva prosessi?

Sivun loppuun

temu92 [03.10.2006 14:51:56]

#

Miten saisin suljettua päälläolevan prosessin? Suunnitelmissa on pilailuohjelma joka sulkisi Explorer.exen.

T.M. [03.10.2006 14:55:26]

#

Hihiihihihihihi, hauskaa. Onko tossa nyt mitään järkeä?

Meitsi [03.10.2006 15:32:32]

#

Kymmeniä aikaisempia pilailuohjelmatreadeja tutkimalla saat kaivettua sopivia apifunktioita joilla tämäkin onnistuu. Ihmettelen kyllä samaa kuin T.M.

kayttaja-4976 [03.10.2006 16:02:30]

#

#include <windows.h>
TerminateProcess()

Noita käyttämällä onnistuu. En vain näe mitään järkeä projektissa.

temu92 [03.10.2006 16:30:37]

#

No, ittelle vaan huvin vuoks teen. Saan samalla harjoitusta C++:n kanssa joten eipä ole haittaakaan =P

EDIT: Mites tota käytetään?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminateprocess.asp
MSDN katsoin mutta en saanut oikeen selvää.

kayttaja-4976 [03.10.2006 16:46:22]

#

Se terminoi prosessin joka sille annetaan. AllApi luonnehtii näin:
The TerminateProcess function terminates the specified process and all of its threads.

Argumentteina:
· hProcess
Identifies the process to terminate.
Windows NT: The handle must have PROCESS_TERMINATE access. For more information, see Process Objects.

· uExitCode
Specifies the exit code for the process and for all threads terminated as a result of this call. Use the GetExitCodeProcess function to retrieve the process’s exit value. Use the GetExitCodeThread function to retrieve a thread’s exit value.

VB:n määrittely:
Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Palautusarvot:
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

temu92 [03.10.2006 17:45:13]

#

Mihin sitten syötän sen prosessin nimen? Aika hankalaa, mutta alkuunhan se on aina =|

Olen edelleen yrittänyt käydä MSDN:ää läpi mutta ei löydy.

Deffi [03.10.2006 18:52:49]

#

xliqz kirjoitti:

WriteProcessMemory(toinenprocessi,(void*)(DWORD)GetProcAddress(GetModuleHandle("user32.dll"),"PeekMessageA"),0xF4,1,NULL);

Jarkko-C++ [03.10.2006 18:54:33]

#

Jos nimeltä haluat prosessin tappaa, niin se onnistunee käyttäen CreateToolhelp32SnapShot:in ja muutaman muun jutun avulla. Otin yhestä vähän aikaa sitten kirjoittamastani coodista suoraan aliohjelman, joka tappaa prosessin nimeltä:

int TerminateByChar(char Name[])
{
    HANDLE ProcessHandle; //Kahva prosessiin.
    PROCESSENTRY32 ProcessEntry; //Sisältää tietoa prosessista. (Katso msdn.comista lisää)
    HANDLE ProcessSnap = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); //Ottaa "kuvan" prosesseista, jota voi sitten "selata".
    Process32First(ProcessSnap, &ProcessEntry); //Katso tietoa ensinmäisestä prosessista.
    do
    {
          if (strcmp(Name, ProcessEntry.szExeFile) == 0) //szExeFile on prosessin nimi. Eli jos se on sama kuin haluttu nimi, niin tehdään seuraava.
          {
           ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessEntry.th32ProcessID); //Avaa prosessi prosessin ID:n avulla.
           if (ProcessHandle == 0) //Jos avaus onnistui.
              return 0;
           TerminateProcess(ProcessHandle, false); //Tapa se.
           CloseHandle(ProcessHandle);
           return 1;
          }
    }
    while(Process32Next(ProcessSnap, &ProcessEntry)); //"Katso" seuraavan prosessin tiedot. Ts, kopio sen tiedot ProcessEntry:yn.

    CloseHandle(ProcessSnap);
    CloseHandle(ProcessHandle);
    return 0;
}

Joo, on vähän huonosti selitetty, mutta toivottavasti antaa idean. Samantapaisia esimerkkei pitäis kyl löytyy ihan googlesta tai msdn.com:ista.

Blaze [03.10.2006 19:16:40]

#

Itse treenasin C:tä joskus tekemällä XP:n tasklistiä ja taskkilliä vastaavat pikkusoftat kakstonniseen, sorsa kai tuolla: http://blaze.dyndns.ws:8080/~blaze/taskkill/ ja http://blaze.dyndns.ws:8080/~blaze/tasklist/

temu92 [04.10.2006 19:31:43]

#

Nyt selkiää, hyvä. Hankalalta se kuitenkin vieläkin vaikuttaa


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta