Miten saisin suljettua päälläolevan prosessin? Suunnitelmissa on pilailuohjelma joka sulkisi Explorer.exen.
Hihiihihihihihi, hauskaa. Onko tossa nyt mitään järkeä?
Kymmeniä aikaisempia pilailuohjelmatreadeja tutkimalla saat kaivettua sopivia apifunktioita joilla tämäkin onnistuu. Ihmettelen kyllä samaa kuin T.M.
#include <windows.h>
TerminateProcess()
Noita käyttämällä onnistuu. En vain näe mitään järkeä projektissa.
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?
MSDN katsoin mutta en saanut oikeen selvää.
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.
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.
xliqz kirjoitti:
WriteProcessMemory(toinenprocessi,(void*)(DWORD)
GetProcAddress(GetModuleHandle("user32.dll"), "PeekMessageA"),0xF4,1,NULL);
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.
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/
Nyt selkiää, hyvä. Hankalalta se kuitenkin vieläkin vaikuttaa
Aihe on jo aika vanha, joten et voi enää vastata siihen.